home *** CD-ROM | disk | FTP | other *** search
/ Scene Storm / Scene Storm - Volume 1.iso / coding / asm / music / protracker / pt.lzh / PT2.0.asm < prev    next >
Assembly Source File  |  1991-12-18  |  342KB  |  19,533 lines

  1. ;**********************************************************
  2. ;*                                                        *
  3. ;*  Protracker Version 2.0 - Release A                    *
  4. ;*  Amiga Freelancers 1991                                *
  5. ;*                                                        *
  6. ;*  Based on Soundtracker V2.5 / Noisetracker x.x)        *
  7. ;*  Coded by Lars Hamre  (larsha@frodo.uninett)           *
  8. ;*  with some "Resource" help from Anders Hamre           *
  9. ;*  Thanks to Rune, and a hi there to Sven, Morten,       *
  10. ;*  Per and Torgeir.                                      *
  11. ;*                                                        *
  12. ;*--------------------------------------------------------*
  13. ;*  First Update   1.0 : 04/05-1990 First version         *
  14. ;* Middle Update   1.0 : 13/08-1990 -                     *
  15. ;*   Last Update   1.0 : 25/08-1990 -                     *
  16. ;* Final Version   1.0 : 26/08-1990 Released to Crusaders *
  17. ;* Rev. B Update 1 1.0B: 29/08-1990 -                     *
  18. ;* Rev. B Update 2 1.0B: 06/09-1990 Released to Crusaders *
  19. ;* Rev. C Update 1 1.0C: 16/10-1990 -                     *
  20. ;* Rev. C Update 2 1.0C: 18/10-1990 -                     *
  21. ;* Start V1.1A     1.1A: 23/10-1990 Second version        *
  22. ;* Rev. C Update 3 1.0C: 06/11-1990 Released to Crusaders *
  23. ;* Rev. A Update 1 1.1A: 15/11-1990 InputEvent Handler    *
  24. ;* Rev. A Update 2 1.1A: 21/11-1990 RunBack Hunk, KbdBuf. *
  25. ;* Rev. A Update 3 1.1A: 02/12-1990 iffld,loopspr,scopefix*
  26. ;* Rev. A Update 4 1.1A: 05/12-1990 virusattack,dirbrowse *
  27. ;* Rev. A Update 5 1.1A: 20/12-1990 Testversion to Awesome*
  28. ;* Rev. A Update 6 1.1A: 27/12-1990 Party-release (w/bugs)*
  29. ;* Rev. B Update 1 1.1B: 01/01-1991 Bugfixing...          *
  30. ;* Rev. B Update 2 1.1B: 05/01-1991 ---                   *
  31. ;* Rev. B Update 3 1.1B: 08/01-1991 ScopeGfx, loadbug.    *
  32. ;* Start V2.0A     2.0A: 12/02-1991 Wow! a new version... *
  33. ;**********************************************************
  34.  
  35. ; FileFormat
  36. sd_songname    EQU    0
  37. sd_sampleinfo    EQU    20
  38. sd_numofpatt    EQU    950
  39. sd_pattpos    EQU    952
  40. sd_mahokakt    EQU    1080
  41. sd_patterndata    EQU    1084
  42.  
  43. ; audXtemp offsets
  44. n_note        EQU    0  ; W
  45. n_cmd        EQU    2  ; W
  46. n_cmdlo        EQU    3  ; low B of cmd
  47. n_start        EQU    4  ; L
  48. n_length    EQU    8  ; W
  49. n_loopstart    EQU    10 ; L
  50. n_replen    EQU    14 ; W
  51. n_period    EQU    16 ; W
  52. n_finetune    EQU    18 ; B
  53. n_volume    EQU    19 ; B
  54. n_dmabit    EQU    20 ; W
  55. n_toneportdirec    EQU    22 ; B
  56. n_toneportspeed    EQU    23 ; B
  57. n_wantedperiod    EQU    24 ; W
  58. n_vibratocmd    EQU    26 ; B
  59. n_vibratopos    EQU    27 ; B
  60. n_tremolocmd    EQU    28 ; B
  61. n_tremolopos    EQU    29 ; B
  62. n_wavecontrol    EQU    30 ; B
  63. n_glissfunk    EQU    31 ; B
  64. n_sampleoffset    EQU    32 ; B
  65. n_pattpos    EQU    33 ; B
  66. n_loopcount    EQU    34 ; B
  67. n_funkoffset    EQU    35 ; B
  68. n_wavestart    EQU    36 ; L
  69. n_reallength    EQU    40 ; W
  70. n_trigger    EQU    42 ; B
  71. n_samplenum    EQU    43 ; B
  72.  
  73. ; Exec Library Offsets
  74. LVOFindTask    EQU    -294
  75. LVOFindName    EQU    -276
  76. LVOForbid    EQU    -132
  77. LVOPermit    EQU    -138
  78. LVOAddPort    EQU    -354
  79. LVORemPort    EQU    -360
  80. LVOWaitPort    EQU    -384
  81. LVOOpenLibrary    EQU    -552
  82. LVOCloseLibrary    EQU    -414
  83. LVOOpenDevice    EQU    -444
  84. LVOCloseDevice    EQU    -450
  85. LVODoIO        EQU    -456
  86. LVOGetMsg    EQU    -372
  87. LVOReplyMsg    EQU    -378
  88. LVOAllocMem    EQU    -198
  89. LVOAllocAbs    EQU    -204
  90. LVOFreeMem    EQU    -210
  91. LVOAvailMem    EQU    -216
  92. LVOAddIntServer    EQU    -168
  93. LVORemIntServer    EQU    -174
  94. LVOOpenResource    EQU    -498
  95. LVOSetFunction    EQU    -420
  96.  
  97. ; CIA Resource Offsets
  98. AddICRVector    EQU    -6
  99. RemICRVector    EQU    -12
  100.  
  101. ; DOS Library Offsets
  102. LVOOpen        EQU    -30
  103. LVOClose    EQU    -36
  104. LVORead        EQU    -42
  105. LVOWrite    EQU    -48
  106. LVODeleteFile    EQU    -72
  107. LVORename    EQU    -78
  108. LVOLock        EQU    -84
  109. LVOUnLock    EQU    -90
  110. LVOExamine    EQU    -102
  111. LVOExNext    EQU    -108
  112. LVOInfo        EQU    -114
  113. LVOSeek        EQU    -66
  114. LVOCreateDir    EQU    -120
  115. LVODateStamp    EQU    -192
  116. LVODelay    EQU    -198
  117. LVOExecute    EQU    -222
  118. LVOUnLoadSeg    EQU    -156
  119.  
  120. ; Intuition Library Offsets
  121. LVOAutoRequest      EQU    -348
  122. LVODisplayAlert   EQU    -90      
  123. LVOOpenWorkbench  EQU    -210
  124. LVOCloseWorkbench EQU    -78
  125. LVOWBenchToFront  EQU    -342
  126.  
  127. ; Graphics Library Offsets
  128. LVOBltBitMap    EQU    -30
  129. LVOWaitBlit    EQU    -228
  130. LVOOwnBlitter    EQU    -456
  131. LVODisownBlitter EQU    -462
  132.  
  133. ; DateStamp
  134. ofib_DateStamp    EQU    $84
  135. ds_Days        EQU    $00
  136. ds_Minute    EQU    $04
  137. ds_Tick        EQU    $08
  138.  
  139. ; Memory Alloc Flags
  140. MEMF_PUBLIC    EQU    $0001
  141. MEMF_CHIP    EQU    $0002
  142. MEMF_FAST    EQU    $0004
  143. MEMF_CLEAR    EQU    $10000
  144. MEMF_LARGEST    EQU    $20000
  145.  
  146. ; IO Block Offsets
  147. IO_COMMAND    EQU    $1C
  148. IO_ACTUAL    EQU    $20
  149. IO_LENGTH    EQU    $24
  150. IO_DATA        EQU    $28
  151. IO_OFFSET    EQU    $2C
  152.  
  153. ; Device Commands 
  154. CMD_READ    EQU    $2
  155. CMD_WRITE    EQU    $3
  156. CMD_UPDATE    EQU    $4
  157. TD_MOTOR    EQU    $9
  158. TD_FORMAT    EQU    $B
  159. TD_CHANGESTATE    EQU    $E
  160. TD_PROTSTATUS    EQU    $F
  161.  
  162.  
  163. DirNameLength        EQU    30
  164. ConfigFileSize        EQU    1024
  165. KeyBufSize        EQU    20
  166.  
  167. ;**************************************************************************
  168.  
  169. ; RunBack Hunk for Protracker
  170. ; Written by Lars Hamre/Amiga Freelancers 1990
  171. ; NOTE: This version will not pass arguments or WBMsg to the new Process!
  172.  
  173.     SECTION    ptrunback,CODE
  174.  
  175. rb_HunkStart
  176.     SUB.L    A1,A1
  177.     MOVE.L    4.W,A6
  178.     JSR    -294(A6)    ; FindTask
  179.     MOVE.L    D0,A4
  180.     MOVEQ    #0,D0
  181.     TST.L    $AC(A4)        ; pr_CLI
  182.     BNE.S    rb_FromCLI
  183.     LEA    $5C(A4),A0    ; pr_MsgPort
  184.     JSR    -384(A6)    ; WaitPort
  185.     LEA    $5C(A4),A0
  186.     JSR    -372(A6)    ; GetMsg
  187. rb_FromCLI
  188.     MOVE.L    D0,D7        ; D7 = WBmsg
  189.     LEA    rb_DOSname(PC),A1
  190.     MOVEQ    #0,D0
  191.     JSR    -552(A6)    ; OpenLibrary
  192.     TST.L    D0
  193.     BEQ.S    rb_dexit
  194.     MOVE.L    D0,A5
  195.     EXG    A5,A6        ; A6=DOS
  196.     MOVE.L    $98(A4),D1    ; pr_CurrentDir
  197.     JSR    -96(A6)        ; DupLock
  198.     MOVE.L    D0,rb_CurrentDir
  199.     EXG    A5,A6 ; A6=exec
  200.     JSR    -132(A6) ; Forbid
  201.     MOVE.L    #rb_ProgName,D1
  202.     MOVEQ.L    #0,D2
  203.     MOVE.B    9(A4),D2    ; priority
  204.     LEA    rb_HunkStart-4(PC),A0
  205.     MOVE.L    (A0),D3        ; Ptr to next segment
  206.     CLR.L    (A0)        ; Unlink next segment
  207.     MOVE.L    #4000,D4
  208.     EXG    A5,A6        ; A6=DOS
  209.     JSR    -138(A6)    ; CreateProc
  210.     EXG    A5,A6        ; A6=exec
  211.     JSR    -138(A6)    ; Permit
  212.     MOVE.L    A5,A1
  213.     JSR    -414(A6)    ; CloseLibrary
  214. rb_dexit
  215.     TST.L    D7
  216.     BEQ.S    rb_exit
  217.     JSR    -132(A6)    ; Forbid
  218.     MOVE.L    D7,A1
  219.     JSR    -378(A6)    ; ReplyMsg
  220. rb_exit    MOVEQ    #0,D0
  221.     RTS
  222.  
  223. rb_DOSname    dc.b    "dos.library",0
  224.  
  225. ; End of runback hunk
  226.  
  227. ;******************** CODE HUNK *********************
  228.  
  229.     SECTION ptcode,CODE
  230.  
  231. START    MOVE.L    4.W,A6
  232.     SUB.L    A1,A1
  233.     JSR    LVOFindTask(A6)
  234.     MOVE.L    D0,PTProcess
  235.     BSR.S    Main
  236.     MOVE.L    4.W,A6
  237.     JSR    LVOForbid(A6)
  238.     MOVE.L    DOSbase,A6
  239.     MOVE.L    rb_CurrentDir(PC),D1
  240.     JSR    LVOUnLock(A6)
  241.     LEA    START-4(PC),A0
  242.     MOVE.L    A0,D1
  243.     LSR.L    #2,D1
  244.     JSR    LVOUnLoadSeg(A6)
  245.     MOVEQ    #0,D0
  246.     RTS
  247.  
  248. Main    MOVE.L    SP,StackSave
  249.     BSR    OpenLotsOfThings
  250.     BSR    SetVBInt
  251.     BSR    SetMusicInt
  252.     BSR    SetInputHandler
  253.     BSR    SetAutoReq
  254. ;    BSR    SetDispAlert
  255.     BSR    SetPatternPos
  256.     BSR    SetNormalPtrCol
  257.     BSR    StorePtrCol
  258.     BSR    RedrawToggles
  259.     BSR    DoShowFreeMem
  260.     BSR    SetTempo
  261.     BSR    SetCopList
  262.     BSR    CheckInitError
  263.     LEA    VersionText(PC),A0
  264.     JSR    ShowStatusText
  265. MainLoop
  266.     BSR    DoKeyBuffer
  267.     BSR    CheckTransKeys
  268.     BSR    CheckCtrlKeys
  269.     BSR    CheckAltKeys
  270.     BSR    CheckKeyboard
  271.     BSR    CheckF1_F2
  272.     BSR    CheckF3_F5
  273.     BSR    CheckF6_F10
  274.     BSR    CheckPlayKeys
  275.     BSR    CheckHelpKey
  276.     BSR    ArrowKeys2
  277.     BSR    ShowTimer
  278.     BSR    ShowFreeMem
  279.     BSR    CheckBlockPos
  280.     BSR    CheckSampleLength
  281.     BSR    CheckRedraw
  282.     JSR    CheckMIDIin
  283.     BTST    #6,$BFE001
  284.     BNE.S    MainLoop    ; Loop if not pressed
  285.     TST.W    CurrScreen
  286.     BNE.S    MainSkip
  287.     MOVE.W    #1,notogfl
  288.     BSR    DisplayMainScreen
  289.     JSR    ShowAllRight
  290.     BSR    WaitForButtonUp
  291. MainSkip
  292.     BSR    ArrowKeys
  293.     BRA    CheckGadgets
  294.  
  295. notogfl        dc.w 0
  296. PTProcess    dc.l 0
  297. rb_CurrentDir    dc.l 0
  298. rb_Progname    dc.b "PT2.0A",0
  299. VersionText    dc.b 'V2.0 - RELEASE A',0
  300.  
  301. CheckInitError
  302.     MOVE.B    InitError,D0
  303.     BEQ    Return1
  304.     BTST    #0,D0
  305.     BEQ.S    cieskp1
  306.     JSR    PLSTMemErr
  307. cieskp1    MOVE.B    InitError,D0
  308.     BTST    #1,D0
  309.     BEQ.S    cieskp2
  310.     JSR    PLSTOpenErr
  311.     JSR    FreePLST
  312. cieskp2    MOVE.B    InitError,D0
  313.     BTST    #2,D0
  314.     BEQ.S    cieskp3
  315.     BSR    ConfigErr
  316. cieskp3    MOVE.B    InitError,D0
  317.     BTST    #3,D0
  318.     BEQ    Return1
  319.     BSR    ConfigErr2
  320.     BSR    SetNormalPtrCol
  321.     BRA    StorePtrCol
  322.  
  323. CheckRedraw
  324.     TST.B    UpdateTempo
  325.     BEQ.S    chkredr
  326.     CLR.B    UpdateTempo
  327.     BSR    SetTempo
  328. chkredr    CMP.L    #'patp',RunMode
  329.     BNE    Return1
  330.     JSR    ShowPosition
  331.     TST.B    PattRfsh
  332.     BEQ    Return1
  333.     MOVE.L    PattRfshNum,PatternNumber
  334.     JMP    RedrawPattern
  335.  
  336. ;---- Cleanup upon exit from PT ----
  337.  
  338. ExitCleanup
  339.     JSR    StopIt
  340.     SF    EdEnable
  341.     BSR    EscPressed
  342.     BSR    EscPressed
  343.     BSR    ResetVBInt
  344.     BSR    ResetMusicInt
  345.     BSR    ResetInputHandler
  346.     BSR    ResetAutoReq
  347. ;    BSR    ResetDispAlert
  348.     BSR    ResetCopList
  349.     JSR    CloseMIDI
  350.     JSR    FreeCopyBuf
  351. errorexit1
  352. errorexit2
  353.     MOVE.L    StackSave,SP
  354.     MOVE.L    4.W,A6
  355.     MOVE.L    GfxBase,A1
  356.     JSR    LVOCloseLibrary(A6)
  357.     MOVE.L    IntuitionBase,A1
  358.     JSR    LVOCloseLibrary(A6)
  359.     MOVE.L    DOSbase,A1
  360.     JSR    LVOCloseLibrary(A6)
  361.  
  362.     MOVE.L    TextBplPtr,D1
  363.     BEQ.S    exex1
  364.     MOVE.L    D1,A1
  365.     MOVE.L    #27760,D0
  366.     JSR    LVOFreeMem(A6)
  367. exex1    MOVE.L    SongDataPtr,D1
  368.     BEQ.S    exex2
  369.     MOVE.L    D1,A1
  370.     MOVE.L    #70716,D0
  371.     JSR    LVOFreeMem(A6)
  372. exex2    BSR    FreeDirMem
  373.     BSR    GiveBackInstrMem
  374.     JSR    FreePLST
  375.     JSR    TurnOffVoices
  376.     BCLR    #1,$BFE001
  377.     MOVE.B    LEDStatus,D0
  378.     AND.B    #2,D0
  379.     OR.B    D0,$BFE001 ; Restore LED Status
  380.     MOVEQ    #0,D0
  381. Return1    RTS
  382.  
  383. ;---- Open Lots Of Things ----
  384.  
  385. OpenLotsOfThings
  386.     MOVE.B    $BFE001,LEDStatus
  387.     BSET    #1,$BFE001
  388.     JSR    TurnOffVoices
  389.     MOVE.L    4.W,A6
  390.     LEA    DOSname(PC),A1        ; Open DOS library
  391.     MOVEQ    #0,D0
  392.     JSR    LVOOpenLibrary(A6)
  393.     MOVE.L    D0,DOSbase
  394.     LEA    GraphicsName(PC),A1    ; Open graphics library
  395.     MOVEQ    #0,D0
  396.     JSR    LVOOpenLibrary(A6)
  397.     MOVE.L    D0,GfxBase
  398.     LEA    IntuitionName(PC),A1    ; Open Intuition library
  399.     MOVEQ    #0,D0
  400.     JSR    LVOOpenLibrary(A6)
  401.     MOVE.L    D0,IntuitionBase
  402.  
  403.     MOVE.L    #27760,D0        ; Alloc 27k CHIP textbpl
  404.     MOVE.L    #MEMF_CHIP!MEMF_CLEAR,D1
  405.     JSR    LVOAllocMem(A6)
  406.     MOVE.L    D0,TextBplPtr
  407.     BEQ    errorexit1
  408.     MOVE.W    D0,NoteBplptrLow    ; set low word
  409.     SWAP    D0
  410.     MOVE.W    D0,NoteBplptrHigh    ; set high word
  411.  
  412.     MOVE.L    #70716,D0        ; Alloc 70k patternmemory
  413.     MOVE.L    #MEMF_PUBLIC!MEMF_CLEAR,D1
  414.     JSR    LVOAllocMem(A6)
  415.     MOVE.L    D0,SongDataPtr
  416.     BEQ    errorexit2
  417.  
  418.     MOVE.L    D0,A0
  419.     LEA    $0014(A0),A0
  420.     MOVEQ    #30,D0
  421. alotloop1
  422.     MOVE.W    #1,$001C(A0)
  423.     LEA    $001E(A0),A0
  424.     DBRA    D0,alotloop1
  425.     MOVE.L    SongDataPtr,A0
  426.     MOVE.W    #$017F,sd_numofpatt(A0)
  427.     MOVE.L    #'M.K.',sd_mahokakt(A0)    ; M.K. again...
  428.  
  429.     MOVEQ    #6,D0
  430.     MOVE.L    D0,CurrSpeed
  431.     MOVE.W    #1,PEDpos
  432.     MOVE.L    #ModulesPath2,PathPtr
  433.     MOVE.L    #CopList,CopListPtr
  434.     MOVE.L    #CopListBitplanes,CopListBplPtr
  435.     MOVE.L    #CopListColors,CopListColorPtr
  436.     MOVE.L    #CopListBpl4,CopListBpl4Ptr
  437.     MOVE.L    #KbdTransTable2,KeyTransTabPtr
  438.     MOVE.L    #NoteNames1,NoteNamesPtr
  439.     MOVE.L    #VUMeterColors,TheRightColors
  440.  
  441.     MOVE.L    #BitplaneData,D0 ; Set pointers to bitplane data
  442.     LEA    CopListBitplanes,A1
  443.     MOVE.W    D0,6(A1)
  444.     SWAP    D0
  445.     MOVE.W    D0,2(A1)
  446.     SWAP    D0
  447.     ADD.L    #10240,D0
  448.     MOVE.W    D0,14(A1)
  449.     SWAP    D0
  450.     MOVE.W    D0,10(A1)
  451.     BSR    SetDefSpritePtrs
  452.     BSR    UpdateCursorPos
  453.     JSR    RedrawPattern
  454.     JSR    ShowPosition
  455.     JSR    ShowSongLength
  456.     MOVE.W    #1,InsNum
  457.     JSR    ShowSampleInfo
  458.  
  459.     LEA    TopMenusPos,A0
  460.     LEA    TopMenusBuffer,A1
  461.     MOVEQ    #43,D0
  462. stmloop    MOVEQ    #24,D1
  463. stmloop2
  464.     MOVE.B    (A0)+,(A1)+
  465.     MOVE.B    $27FF(A0),$044B(A1)
  466.     DBRA    D1,stmloop2
  467.     LEA    15(A0),A0
  468.     DBRA    D0,stmloop
  469.  
  470.     BSR    DoResetAll
  471.     BSR    DoLoadConfig
  472.     JSR    DoLoadPLST
  473. ChangeCopList
  474.     TST.W    SamScrEnable
  475.     BNE    Return1
  476.     BSR    SetupAnaCols
  477. SetupVUCols
  478.     TST.W    SamScrEnable
  479.     BNE    Return1
  480.     LEA    CopListMark2,A0    ; VUmeter coloring
  481.     MOVE.W    #$BA07,D5    ; Start position
  482.     LEA    VUmeterColors,A5
  483.     MOVEQ    #47,D7    ; Change 48 lines
  484. alotlp4    MOVE.W    D5,(A0)+
  485.     MOVE.W    #$FFFE,(A0)+
  486.     LEA    VUmeterColRegs(PC),A1
  487.     MOVEQ    #1,D6
  488. alotlp5    MOVE.W    (A5),D4
  489.     MOVE.W    (A1)+,(A0)+
  490.     MOVE.W    #3,FadeX
  491.     MOVE.W    D4,D0
  492.     BSR    FadeCol
  493.     MOVE.W    D0,(A0)+
  494.     MOVE.W    (A1)+,(A0)+
  495.     MOVE.W    D4,(A0)+
  496.     MOVE.W    (A1)+,(A0)+
  497.     MOVE.W    #-3,FadeX
  498.     MOVE.W    D4,D0
  499.     BSR    FadeCol
  500.     MOVE.W    D0,(A0)+
  501.     DBRA    D6,alotlp5
  502.     ADDQ.W    #2,A5
  503.     ADD.W    #$0100,D5    ; Next line...
  504.     DBRA    D7,alotlp4
  505.     RTS
  506.  
  507. VUmeterColRegs
  508.     dc.w    $01B2,$01B4,$01B6,$01BA,$01BC,$01BE
  509.  
  510. CopListBpl4Ptr    dc.l    0
  511. CopListPtr    dc.l    0
  512. CopListBplPtr    dc.l    0
  513. CopListColorPtr    dc.l    0
  514. DOSname        dc.b    'dos.library',0
  515. IntuitionName    dc.b    'intuition.library',0
  516. GraphicsName    dc.b    'graphics.library',0,0
  517.  
  518. SetupAnaCols
  519.     LEA    CopListAnalyzer,A5
  520.     MOVE.W    ColorTable+12,D2
  521.     MOVEQ    #39,D0        ; Change col 40 lines
  522.     MOVE.W    #$687D,D1    ; Start pos
  523. sacloop    MOVE.W    D1,(A5)+    ; Set wait
  524.     MOVE.W    #$FFFE,(A5)+
  525.     MOVE.W    #$018C,(A5)+    ; Set analyzer color
  526.     ADDQ.L    #2,A5
  527.     ADD.W    #$0060,D1    ; Move x-pos
  528.     MOVE.W    D1,(A5)+    ; Wait
  529.     MOVE.W    #$FFFE,(A5)+
  530.     MOVE.W    #$018C,(A5)+    ; Set text color
  531.     MOVE.W    D2,(A5)+
  532.     ADD.W    #$0100,D1    ; Next line...
  533.     SUB.W    #$0060,D1
  534.     DBRA    D0,sacloop
  535.     TST.B    DisableAnalyzer
  536.     BNE.S    ClearAnalyzerColors
  537. SetAnalyzerColors
  538.     LEA    CopListAnalyzer+6,A1
  539.     LEA    AnalyzerColors,A0
  540.     MOVEQ    #39,D0    ; 40 lines
  541. sanclop    MOVE.W    (A0)+,(A1)
  542.     LEA    16(A1),A1
  543.     DBRA    D0,sanclop
  544.     RTS
  545.  
  546. ClearAnalyzerColors
  547.     LEA    CopListAnalyzer+6,A0
  548.     MOVE.W    ColorTable+12,D1
  549.     MOVEQ    #39,D0    ; 40 lines.
  550. cacloop    MOVE.W    D1,(A0)
  551.     LEA    16(A0),A0
  552.     DBRA    D0,cacloop
  553.     RTS
  554.  
  555. SetSamSpritePtrs
  556.     MOVE.L    #LoopSpriteData1,Ch1SpritePtr
  557.     MOVE.L    #LoopSpriteData2,Ch2SpritePtr
  558.     MOVE.L    #PlayPosSpriteData,Ch3SpritePtr
  559.     MOVE.L    #NoSpriteData,Ch4SpritePtr
  560.     BRA.S    sdsp2
  561. SetDefSpritePtrs
  562.     MOVE.L    #VUSpriteData1,Ch1SpritePtr
  563.     MOVE.L    #VUSpriteData2,Ch2SpritePtr
  564.     MOVE.L    #VUSpriteData3,Ch3SpritePtr
  565.     MOVE.L    #VUSpriteData4,Ch4SpritePtr
  566. sdsp2    MOVE.L    #CursorSpriteData,CursorPosPtr
  567.     MOVE.L    #PointerSpriteData,PointerSpritePtr
  568.     MOVE.L    #LineCurSpriteData,LineCurPosPtr
  569.     MOVE.L    #NoSpriteData,NoSpritePtr
  570.     MOVE.L    PointerSpritePtr,SpritePtrsPtr
  571.  
  572.     LEA    SpritePtrsPtr,A0    ; Set pointers to spritedata
  573.     LEA    CopList,A1
  574.     MOVEQ    #15,D2
  575. alotloop2
  576.     MOVE.W    (A0)+,2(A1)
  577.     ADDQ.L    #4,A1
  578.     DBRA    D2,alotloop2
  579.     RTS
  580.  
  581. PointerSpritePtr
  582.     dc.l    0
  583.  
  584. ;---- AutoRequest() ----
  585.  
  586. SetAutoReq
  587.     MOVE.L    4.W,A6
  588.     JSR    LVOForbid(A6)
  589.     MOVE.L    IntuitionBase,A1
  590.     MOVE.L    #NewAutoRequest,D0
  591.     MOVE.L    #LVOAutoRequest,A0
  592.     JSR    LVOSetFunction(A6)
  593.     MOVE.L    D0,AutoReqSave
  594.     MOVE.L    D0,xyzza+2
  595.     JSR    LVOPermit(A6)
  596.     RTS
  597.  
  598. ResetAutoReq
  599.     MOVE.L    4.W,A6
  600.     MOVE.L    IntuitionBase,A1
  601.     MOVE.L    AutoReqSave(PC),D0
  602.     MOVE.L    #LVOAutoRequest,A0
  603.     JSR    LVOSetFunction(A6)
  604.     RTS
  605.  
  606. NewAutoRequest
  607.     TST.W    MountFlag
  608.     BNE    PositiveReturn
  609.     TST.B    AutoReqRunning
  610.     BNE.S    xyzza
  611.     ST     AutoReqRunning
  612.     MOVE.L    A0,-(SP)
  613.     MOVE.L    GfxBase,A0
  614.     MOVE.L    38(A0),$DFF080
  615.     MOVE.L    (SP)+,A0
  616. xyzzy    JSR    $0
  617.     MOVE.L    #CopList,$DFF080
  618.     SF    AutoReqRunning
  619.     RTS
  620. xyzza    JMP    $0
  621.  
  622. AutoReqSave    EQU xyzzy+2
  623.  
  624. ;---- DisplayAlert() ----
  625.  
  626. SetDispAlert
  627.     MOVE.L    IntuitionBase,A0
  628.     MOVE.L    LVODisplayAlert+2(A0),DispAlertSave
  629.     MOVE.L    #NewDispAlert,LVODisplayAlert+2(A0)
  630.     RTS
  631.  
  632. ResetDispAlert
  633.     MOVE.L    IntuitionBase,A0
  634.     MOVE.L    DispAlertSave,LVODisplayAlert+2(A0)
  635.     RTS
  636.  
  637. NewDispAlert
  638.     MOVEM.L    D0-D7/A0-A6,-(SP)
  639.     LEA    SoftFailText(PC),A1
  640.     ADDQ.L    #3,A0
  641.     MOVEQ    #16,D0
  642. ndaloop    CMP.B    (A1)+,(A0)+
  643.     BNE.S    ndaexit
  644.     DBRA    D0,ndaloop
  645.     BSR    FindAdr
  646.     TST.L    D0
  647.     BEQ.S    ndaexit
  648.     MOVE.L    D0,A1
  649.     MOVE.L    SongDataPtr,A0
  650.     MOVE.L    #70716,D0
  651. ndalop2    MOVE.B    (A0)+,D1
  652.     MOVE.W    D1,$DFF180
  653.     MOVE.B    D1,(A1)+
  654.     SUBQ.L    #1,D0
  655.     BNE.S    ndalop2
  656. ndaexit    MOVEM.L    (SP)+,D0-D7/A0-A6
  657. xyzzy2    JMP    $FC0000
  658.         
  659. DispAlertSave EQU xyzzy2+2
  660. SoftFailText    dc.b    "Software Failure.",0
  661.  
  662. ;---- Copper List ----
  663.  
  664. SetCopList
  665.     MOVE.L    #CopList,$DFF080
  666.     RTS
  667.  
  668. ResetCopList
  669.     MOVE.L    GfxBase,A0
  670.     MOVE.L    38(A0),$DFF080
  671.     RTS
  672.  
  673. ;---- Vertical Blank Interrupt ----
  674.  
  675. SetVBInt
  676.     MOVEQ    #5,D0
  677.     LEA    VBIntServer,A1
  678.     MOVE.L    4.W,A6
  679.     JSR    LVOAddIntServer(A6)
  680.     RTS
  681.  
  682. ResetVBInt
  683.     MOVEQ    #5,D0
  684.     LEA    VBIntServer,A1
  685.     MOVE.L    4.W,A6
  686.     JSR    LVORemIntServer(A6)
  687.     RTS
  688.  
  689. vbint    MOVEM.L    D0-D7/A0-A6,-(SP)
  690.     BSR    UpdatePointerPos
  691.     BSR    VUmeters
  692.     BSR    Scope
  693.     BSR    SpecAnaInt
  694.     BSR    ArrowKeys
  695.     BSR    CheckKeyRepeat
  696.     BSR    UpdateTicks
  697.     MOVEM.L    (SP)+,D0-D7/A0-A6
  698.     RTS
  699.  
  700. VBIntServer
  701.     dc.l 0,0
  702.     dc.b 2,0 ; type, priority
  703.     dc.l vbintname
  704.     dc.l 0,vbint
  705.  
  706. vbintname
  707.     dc.b "Protracker VBlank",0
  708.  
  709. ;---- Music Interrupt ----
  710.  
  711. SetMusicInt
  712.     TST.B    IntMode
  713.     BNE.S    SetCIAInt
  714.     MOVEQ    #5,D0
  715.     LEA    MusicIntServer,A1
  716.     MOVE.L    4.W,A6
  717.     JSR    LVOAddIntServer(A6)
  718.     RTS
  719.  
  720. ResetMusicInt
  721.     TST.B    IntMode
  722.     BNE    ResetCIAInt
  723.     MOVEQ    #5,D0
  724.     LEA    MusicIntServer,A1
  725.     MOVE.L    4.W,A6
  726.     JSR    LVORemIntServer(A6)
  727.     RTS
  728.  
  729. MusicIntServer
  730.     dc.l 0,0
  731.     dc.b 2,1 ; type, priority
  732.     dc.l musintname
  733.     dc.l 0,IntMusic
  734.  
  735. musintname    dc.b "Protracker MusicInt",0
  736.  
  737. ;---- CIA Interrupt ----
  738.  
  739. ciatalo = $400
  740. ciatahi = $500
  741. ciatblo = $600
  742. ciatbhi = $700
  743. ciacra  = $E00
  744. ciacrb  = $F00
  745.  
  746. SetCIAInt
  747.     MOVEQ    #2,D6
  748.     LEA    $BFD000,A5
  749.     MOVE.B    #'b',CIAAname+3
  750. SetCIALoop
  751.     MOVEQ    #0,D0
  752.     LEA    CIAAname(PC),A1
  753.     MOVE.L    4.W,A6
  754.     JSR    LVOOpenResource(A6)
  755.     MOVE.L    D0,CIAAbase
  756.     BEQ    Return1
  757.     MOVE.L    D0,A6
  758.  
  759.     MOVE.L    GfxBase,A0
  760.     MOVE.W    206(A0),D0    ; DisplayFlags
  761.     BTST    #2,D0        ; PAL?
  762.     BEQ.S    WasNTSC
  763.     MOVE.L    #1773447,D7 ; PAL
  764.     BRA.S    sciask
  765. WasNTSC    MOVE.L    #1789773,D7 ; NTSC
  766. sciask    MOVE.L    D7,TimerValue
  767.     DIVU    #125,D7 ; Default to normal 50 Hz timer
  768.  
  769.     CMP.W    #2,D6
  770.     BEQ.S    TryTimerA
  771. TryTimerB
  772.     LEA    MusicIntServer(PC),A1
  773.     MOVEQ    #1,D0    ; Bit 1: Timer B
  774.     JSR    AddICRVector(A6)
  775.     MOVE.L    #1,TimerFlag
  776.     TST.L    D0
  777.     BNE.S    CIAError
  778.     MOVE.L    A5,CIAAaddr
  779.     MOVE.B    D7,ciatblo(A5)
  780.     LSR.W    #8,D7
  781.     MOVE.B    D7,ciatbhi(A5)
  782.     BSET    #0,ciacrb(A5)
  783.     BRA    SetTempo
  784.  
  785. TryTimerA
  786.     LEA    MusicIntServer(PC),A1
  787.     MOVEQ    #0,D0    ; Bit 0: Timer A
  788.     JSR    AddICRVector(A6)
  789.     CLR.L    TimerFlag
  790.     TST.L    D0
  791.     BNE.S    CIAError
  792.     MOVE.L    A5,CIAAaddr
  793.     MOVE.B    D7,ciatalo(A5)
  794.     LSR.W    #8,D7
  795.     MOVE.B    D7,ciatahi(A5)
  796.     BSET    #0,ciacra(A5)
  797.     BRA    SetTempo
  798.  
  799. CIAError
  800.     MOVE.B    #'a',CIAAname+3
  801.     LEA    $BFE001,A5
  802.     SUBQ.W    #1,D6
  803.     BNE    SetCIALoop
  804.     CLR.L    CIAAbase
  805.     RTS
  806.  
  807. ResetCIAInt
  808.     MOVE.L    CIAAbase(PC),D0
  809.     BEQ    Return1
  810.     CLR.L    CIAAbase
  811.     MOVE.L    D0,A6
  812.     MOVE.L    CIAAaddr(PC),A5
  813.     TST.L    TimerFlag
  814.     BEQ.S    ResTimerA
  815.  
  816.     BCLR    #0,ciacrb(A5)
  817.     MOVEQ    #1,D0
  818.     BRA.S    RemInt
  819.  
  820. ResTimerA
  821.     BCLR    #0,ciacra(A5)
  822.     MOVEQ    #0,D0
  823. RemInt    LEA    MusicIntServer(PC),A1
  824.     MOVEQ    #0,d0
  825.     JSR    RemICRVector(A6)
  826.     RTS
  827.  
  828. CIAAname    dc.b 'ciaa.resource',0
  829. CIAAbase    dc.l 0
  830. TimerFlag    dc.l 0
  831. TimerValue    dc.l 0
  832.  
  833. ;---- Tempo ----
  834.  
  835. TempoGadg
  836.     CMP.W    #60,D0
  837.     BHS    Return1
  838.     CMP.W    #44,D0
  839.     BHS.S    TemDown
  840. TemUp    MOVE.W    RealTempo(PC),D0
  841.     ADDQ.W    #1,D0
  842.     BTST    #2,$DFF016
  843.     BNE.S    teupsk
  844.     ADDQ.W    #8,D0
  845.     ADDQ.W    #1,D0
  846. teupsk    CMP.W    #255,D0
  847.     BLS.S    teposk
  848.     MOVE.W    #255,D0
  849. teposk    MOVE.W    D0,RealTempo
  850.     BSR    SetTempo
  851.     BRA    Wait_4000
  852.  
  853. TemDown    MOVE.W    RealTempo(PC),D0
  854.     SUBQ.W    #1,D0
  855.     BTST    #2,$DFF016
  856.     BNE.S    tednsk
  857.     SUBQ.W    #8,D0
  858.     SUBQ.W    #1,D0
  859. tednsk    CMP.W    #32,D0
  860.     BHS.S    teposk
  861.     MOVE.W    #32,D0
  862.     BRA.S    teposk
  863.  
  864.  
  865. ChangeTempo
  866.     CMP.W    #94,D0
  867.     BHS.S    TempoDown
  868.     CMP.W    #80,D0
  869.     BHS.S    TempoUp
  870.     RTS
  871.  
  872. TempoUp    MOVE.W    Tempo,D0
  873.     ADDQ.W    #1,D0
  874.     BTST    #2,$DFF016
  875.     BNE.S    temupsk
  876.     ADDQ.W    #8,D0
  877.     ADDQ.W    #1,D0
  878. temupsk    CMP.W    #255,D0
  879.     BLS.S    temposk
  880.     MOVE.W    #255,D0
  881. temposk    MOVE.W    D0,Tempo
  882.     MOVE.W    D0,RealTempo
  883.     BSR.S    ShowTempo
  884.     BSR.S    SetTempo
  885.     BRA    Wait_4000
  886.  
  887. TempoDown
  888.     MOVE.W    Tempo,D0
  889.     SUBQ.W    #1,D0
  890.     BTST    #2,$DFF016
  891.     BNE.S    temdnsk
  892.     SUBQ.W    #8,D0
  893.     SUBQ.W    #1,D0
  894. temdnsk    CMP.W    #32,D0
  895.     BHS.S    temposk
  896.     MOVE.W    #32,D0
  897.     BRA.S    temposk
  898.  
  899. ShowTempo
  900.     MOVE.W    #607,TextOffset
  901.     MOVE.W    RealTempo(PC),WordNumber
  902.     JMP    Print3DecDigits
  903.  
  904. SetTempo
  905.     MOVEQ    #125,D0
  906.     MOVE.L    CIAAbase(PC),D1
  907.     BEQ.S    setesk3
  908.     MOVE.W    RealTempo(PC),D0
  909.     CMP.W    #32,D0
  910.     BHS.S    setemsk
  911.     MOVEQ    #32,D0
  912. setemsk    MOVE.W    D0,RealTempo
  913. setesk3    TST.W    SamScrEnable
  914.     BNE.S    setesk2
  915.     MOVE.W    #4964,TextOffset
  916.     MOVE.W    D0,WordNumber
  917.     JSR    Print3DecDigits
  918. setesk2    MOVE.L    CIAAbase(PC),D0
  919.     BEQ    Return1
  920.     MOVE.W    RealTempo(PC),D0
  921.     MOVE.L    TimerValue(PC),D1
  922.     DIVU    D0,D1
  923.     MOVE.L    CIAAaddr(PC),A5
  924.     MOVE.L    TimerFlag(PC),D0
  925.     BEQ.S    SetTemA
  926.     MOVE.B    D1,ciatblo(A5)    ;and set the CIA timer
  927.     LSR.W    #8,D1
  928.     MOVE.B    D1,ciatbhi(A5)
  929.     RTS
  930.  
  931. SetTemA    MOVE.B    D1,ciatalo(A5)
  932.     LSR.W    #8,D1
  933.     MOVE.B    D1,ciatahi(A5)
  934.     RTS
  935.  
  936. RealTempo    dc.w 125
  937. CIAAaddr    dc.l 0
  938.  
  939. ;---- Input Event Handler ----
  940.  
  941. SetInputHandler
  942.     MOVE.L    4.W,A6
  943.     LEA    InpEvPort,A1
  944.     JSR    LVOAddPort(A6)
  945.     LEA    InputDevName,A0
  946.     MOVEQ    #0,D0
  947.     LEA    InpEvIOReq,A1
  948.     MOVEQ    #0,D1
  949.     MOVE.L    #InpEvPort,14(A1)
  950.     JSR    LVOOpenDevice(A6)
  951.     LEA    InpEvIOReq,A1
  952.     MOVE.W    #9,IO_COMMAND(A1) ; IND_ADDHANDLER
  953.     MOVE.L    #InpEvStuff,IO_DATA(A1)
  954.     JSR    LVODoIO(A6)
  955.     RTS
  956.  
  957. ResetInputHandler
  958.     MOVE.L    4.W,A6
  959.     LEA    InpEvIOReq,A1
  960.     MOVE.W    #10,IO_COMMAND(A1) ; IND_REMHANDLER
  961.     MOVE.L    #InpEvStuff,IO_DATA(A1)
  962.     JSR    LVODoIO(A6)
  963.     LEA    InpEvIOReq,A1
  964.     JSR    LVOCloseDevice(A6)
  965.     LEA    InpEvPort,A1
  966.     JSR    LVORemPort(A6)
  967.     RTS
  968.  
  969.  
  970. InpEvStuff
  971.     dc.l    0,0
  972.     dc.b    2,52 ; type, priority
  973.     dc.l    inpevname
  974.     dc.l    0,InputHandler
  975.  
  976. inpevname
  977.     dc.b "Protracker InputHandler",0
  978.  
  979. InputHandler ; A0-InputEvent, A1-Data Area
  980.     MOVE.L    A2,-(SP)
  981.     TST.B    AutoReqRunning
  982.     BNE.S    inphend
  983.     SUB.L    A2,A2
  984.     MOVE.L    A0,A1
  985.     MOVE.B    4(A1),D0 ; ie_Class
  986.     CMP.B    #1,D0    ; RAWKEY
  987.     BEQ.S    InpRawkey
  988.     CMP.B    #2,D0    ; RAWMOUSE
  989.     BEQ.S    InpRawmouse
  990.     MOVE.L    A1,A2
  991. InpNext    MOVE.L    (A1),A1
  992.     MOVE.L    A1,D0
  993.     BNE.S    InputHandler
  994. inphend    MOVE.L    A0,D0
  995.     MOVE.L    (SP)+,A2
  996.     RTS
  997.  
  998. InpRawkey
  999.     BSR    InpUnchain
  1000.     MOVE.W    6(A1),D0
  1001.     BSR    ProcessRawkey
  1002.     BRA    InpNext
  1003.  
  1004. InpRawmouse
  1005.     BSR    InpUnchain
  1006.     MOVE.W    MouseX3,D0
  1007.     MOVE.W    MouseY3,D1
  1008.     ADD.W    10(A1),D0
  1009.     ADD.W    12(A1),D1
  1010.     TST.W    D0
  1011.     BPL.S    irskip1
  1012.     MOVEQ    #0,D0
  1013. irskip1    TST.W    D1
  1014.     BPL.S    irskip2
  1015.     MOVEQ    #0,D1
  1016. irskip2    CMP.W    #640,D0
  1017.     BLO.S    irskip3
  1018.     MOVE.W    #639,D0
  1019. irskip3    CMP.W    #512,D1
  1020.     BLO.S    irskip4
  1021.     MOVE.W    #511,D1
  1022. irskip4    MOVE.W    D0,MouseX3
  1023.     MOVE.W    D1,MouseY3
  1024.     LSR.W    #1,D0
  1025.     LSR.W    #1,D1
  1026.     MOVE.W    D0,MouseX
  1027.     MOVE.W    D1,MouseY
  1028.     BRA.S    InpNext
  1029.  
  1030. InpUnchain
  1031.     MOVE.L    A2,D0
  1032.     BNE.S    InpUnc2
  1033.     MOVE.L    (A1),A0
  1034.     RTS
  1035. InpUnc2    MOVE.L    (A1),(A2)
  1036.     RTS
  1037.  
  1038. ;---- Process rawkey code from the keyboard ----
  1039.  
  1040. ProcessRawkey
  1041.     CMP.B    LastRawkey,D0
  1042.     BEQ    Return1
  1043.     MOVE.B    D0,LastRawkey
  1044.     CMP.B    #67+128,D0
  1045.     BEQ    LowerInstr2
  1046.     CMP.B    #96,D0
  1047.     BEQ    ShiftOn
  1048.     CMP.B    #97,D0
  1049.     BEQ    ShiftOn2
  1050.     CMP.B    #100,D0
  1051.     BEQ    AltOn
  1052.     CMP.B    #101,D0
  1053.     BEQ    AltOn2
  1054.     CMP.B    #99,D0
  1055.     BEQ    CtrlOn
  1056.     CMP.B    #102,D0
  1057.     BEQ    LeftAmigaOn
  1058.     CMP.B    #99+128,D0
  1059.     BEQ    CtrlOff
  1060.     CMP.B    #100+128,D0
  1061.     BEQ    AltOff
  1062.     CMP.B    #96+128,D0
  1063.     BEQ.S    ShiftOff
  1064.     CMP.B    #101+128,D0
  1065.     BEQ    AltOff
  1066.     CMP.B    #97+128,D0
  1067.     BEQ.S    ShiftOff
  1068.     CMP.B    #102+128,D0
  1069.     BEQ    LeftAmigaOff
  1070.     CMP.B    #98,D0
  1071.     BEQ.S    KeyRepOn
  1072.     CMP.B    #98+128,D0
  1073.     BEQ.S    KeyRepOff
  1074. kbintSetKey
  1075.     TST.B    D0
  1076.     BNE.S    kbintDoSet
  1077.     MOVE.B    #127,D0
  1078. kbintDoSet
  1079.     MOVE.W    KeyBufPos(PC),D1
  1080.     CMP.W    #KeyBufSize,D1
  1081.     BHS    Return1
  1082.     LEA    KeyBuffer(PC),A3
  1083.     MOVE.B    D0,(A3,D1.W)
  1084.     ADDQ.W    #1,KeyBufPos
  1085.     RTS
  1086.  
  1087. LowerInstr2
  1088.     CLR.W    HiLowInstr
  1089.     BRA.S    kbintsetkey
  1090.  
  1091. KeyRepOn
  1092.     ST    KeyRepeat
  1093.     RTS
  1094.  
  1095. KeyRepOff
  1096.     SF    KeyRepeat
  1097.     RTS
  1098.  
  1099. ShiftOn    MOVE.W    #1,ShiftKeyStatus
  1100.     RTS
  1101.  
  1102. ShiftOn2
  1103.     MOVE.W    #1,ShiftKeyStatus
  1104.     BRA.S    kbintsetkey
  1105.  
  1106. ShiftOff
  1107.     CLR.W    ShiftKeyStatus
  1108.     RTS
  1109.  
  1110. AltOn    MOVE.W    #1,AltKeyStatus
  1111.     RTS
  1112.  
  1113. AltOn2    MOVE.W    #1,AltKeyStatus
  1114.     BRA.S    kbintsetkey
  1115.  
  1116. AltOff    CLR.W    AltKeyStatus
  1117.     RTS
  1118.  
  1119. CtrlOn    MOVE.W    #1,CtrlKeyStatus
  1120.     RTS
  1121.  
  1122. CtrlOff    CLR.W    CtrlKeyStatus
  1123.     RTS
  1124.  
  1125. LeftAmigaOn
  1126.     MOVE.W    #1,LeftAmigaStatus
  1127.     RTS
  1128.  
  1129. LeftAmigaOff
  1130.     CLR.W    LeftAmigaStatus
  1131.     RTS
  1132.  
  1133. DoKeyBuffer
  1134.     MOVE.W    KeyBufPos(PC),D0
  1135.     BEQ    Return1
  1136.     SUBQ.W    #1,D0
  1137.     LEA    KeyBuffer(PC),A0
  1138.     MOVE.B    (A0,D0.W),D1
  1139.     MOVE.W    D0,KeyBufPos
  1140.     MOVE.B    D1,RawKeyCode
  1141.     MOVE.B    D1,SaveKey
  1142.     MOVE.W    KeyRepDelay,KeyRepCounter
  1143.     BTST    #7,D1
  1144.     BEQ.S    dkbend
  1145.     CLR.W    KeyRepCounter
  1146. dkbend    RTS
  1147.  
  1148. KeyBufPos    dc.w    0
  1149. KeyBuffer    dcb.b    KeyBufSize,0
  1150. ShiftKeyStatus    dc.w    0
  1151. AltKeyStatus    dc.w    0
  1152. CtrlKeyStatus    dc.w    0
  1153. LeftAmigaStatus    dc.w    0
  1154. LastRawkey    dc.b    255,0
  1155. SaveKey        dc.b 0
  1156. KeyRepeat    dc.b 0
  1157. KeyRepCounter    dc.w 0
  1158.  
  1159. ;---- Key repeat ----
  1160.  
  1161. CheckKeyRepeat
  1162.     TST.B    KeyRepeat
  1163.     BEQ    Return1
  1164.     MOVE.W    KeyRepCounter(PC),D0
  1165.     BEQ    Return1
  1166.     SUBQ.W    #1,D0
  1167.     BEQ.S    RepDown
  1168.     MOVE.W    D0,KeyRepCounter
  1169.     RTS
  1170.  
  1171. RepDown    MOVE.B    SaveKey(PC),RawKeyCode
  1172.     MOVE.W    KeyRepSpeed,KeyRepCounter
  1173.     RTS
  1174.  
  1175. ;---- Update Mousepointer Position ----
  1176.  
  1177. UpdatePointerPos
  1178.     MOVE.W    MouseX,D0
  1179.     ADDQ.W    #3,D0
  1180.     MOVE.W    MouseY,D1
  1181.     MOVEQ    #16,D2
  1182.     MOVE.L    PointerSpritePtr,A0
  1183.     JMP    SetSpritePos
  1184.  
  1185. ;---- Timer ----
  1186.  
  1187. UpdateTicks
  1188.     CMP.L    #'patp',RunMode
  1189.     BNE    Return1
  1190.     ADDQ.W    #1,PatternTicks
  1191.     MOVE.W    PatternTicks(PC),D0
  1192.     MOVE.L    4.W,A0
  1193.     CMP.B    $0212(A0),D0
  1194.     BNE    Return1
  1195.     CLR.W    PatternTicks
  1196.     ADDQ.L    #1,TimerTicks
  1197.     RTS    
  1198.  
  1199. ShowTimer
  1200.     CMP.W    #4,CurrScreen
  1201.     BEQ    Return1
  1202.     MOVE.L    TimerTicks(PC),D0
  1203.     DIVU    #60,D0
  1204.     MOVE.W    D0,WordNumber
  1205.     SWAP    D0
  1206.     MOVE.W    D0,D7
  1207.     MOVE.W    #4154,TextOffset
  1208.     JSR    Print2DecDigits
  1209.     MOVE.W    D7,WordNumber
  1210.     ADDQ.W    #1,TextOffset
  1211.     JMP    Print2DecDigits
  1212.  
  1213. PatternTicks    dc.w    0
  1214. TimerTicks    dc.l    0
  1215.  
  1216. ;---- Spectrum Analyzer ----
  1217.  
  1218. SpecAnaInt
  1219.     CMP.W    #1,CurrScreen
  1220.     BNE    Return1
  1221.     TST.B    DisableAnalyzer
  1222.     BNE    Return1
  1223.     TST.B    AnaDrawFlag
  1224.     BNE    Return1
  1225.     MOVEQ    #40,D5
  1226.     MOVEQ    #126,D6
  1227.     LEA    AnalyzerHeights,A0
  1228.     LEA    AnalyzerOpplegg,A1
  1229.     LEA    AnalyzerOffsets(PC),A2
  1230.     MOVE.L    TextBplPtr,A3
  1231.     LEA    1976(A3),A3
  1232.     MOVEQ    #$16,D7
  1233. spanlab1
  1234.     MOVE.W    (A0)+,D0
  1235.     CMP.W    #36,D0
  1236.     BLO.S    spanskip2
  1237.     MOVE.W    #36,D0
  1238. spanskip2
  1239.     MOVE.W    (A1)+,D1
  1240.     CMP.W    D0,D1
  1241.     BEQ.S    spanskip3
  1242.     BLO.S    span_r2
  1243.     SUB.W    D0,D1
  1244.     SUBQ.W    #1,D1
  1245.     ADD.W    D0,D0
  1246.     MOVE.W    0(A2,D0.W),D0
  1247. spanloop
  1248.     CLR.B    0(A3,D0.W)
  1249.     SUB.W    D5,D0
  1250.     DBRA    D1,spanloop
  1251.     BRA.S    spanskip3
  1252.  
  1253. span_r2    SUB.W    D1,D0
  1254.     SUBQ.W    #1,D0
  1255.     LSL.W    #1,D1
  1256.     MOVE.W    0(A2,D1.W),D1
  1257. spanloop2    MOVE.B    D6,0(A3,D1.W)
  1258.     SUB.W    D5,D1
  1259.     DBRA    D0,spanloop2
  1260. spanskip3    ADDQ.L    #1,A3
  1261.     DBRA    D7,spanlab1
  1262.     LEA    AnalyzerHeights,A0
  1263.     LEA    AnalyzerOpplegg,A1
  1264.     MOVEQ    #22,D7
  1265. spanloop3    MOVE.W    (A0),D0
  1266.     MOVE.W    D0,(A1)+
  1267.     BEQ.S    spanskip4
  1268.     SUBQ.W    #1,D0
  1269. spanskip4    MOVE.W    D0,(A0)+
  1270.     DBRA    D7,spanloop3
  1271.     RTS
  1272.  
  1273. ClearAnaHeights
  1274.     LEA    AnalyzerOpplegg,A0
  1275.     LEA    AnalyzerHeights,A1
  1276.     MOVEQ    #22,D7
  1277.     MOVEQ    #0,D0
  1278. cahloop    MOVE.W    D0,(A0)+
  1279.     MOVE.W    D0,(A1)+
  1280.     DBRA    D7,cahloop
  1281.     RTS
  1282.  
  1283. PlayNoteAnalyze
  1284.     MOVEM.L    D0-D3/A0,-(SP)
  1285.     MOVEQ    #0,D2
  1286.     MOVE.W    2(A6),D2
  1287.     BRA.S    SpecAna2
  1288.  
  1289. SpectrumAnalyzer
  1290.     TST.W    (A4)
  1291.     BEQ    Return1
  1292.     MOVEM.L    D0-D3/A0,-(SP)
  1293.     MOVEQ    #0,D2
  1294.     MOVE.B    n_volume(A6),D2    ; Get channel volume
  1295. SpecAna2
  1296.     ST    AnaDrawFlag
  1297.     BSR    SetAnalyzerVolumes
  1298.     BEQ.S    saend
  1299.     LSL.W    #8,D2
  1300.     DIVU    #682,D2
  1301.     MOVE.W    D2,D3
  1302.     LSR.W    #1,D3
  1303.     LEA    AnalyzerHeights,A0
  1304.     SUB.W    #113,D0    ; Subtract 113 (highest rate)
  1305.     MOVE.W    #743,D1
  1306.     SUB.W    D0,D1    ; Invert range 0-743
  1307.     MULU    D1,D1    ; 0 - 743^2
  1308.     DIVU    #25093,D1
  1309.     MOVE.W    D1,D0
  1310.     CMP.W    #46,D0
  1311.     BLO.S    saskip
  1312.     MOVEQ    #45,D0
  1313. saskip    LSL.W    #1,D0
  1314.     ADD.W    D2,(A0,D0.W)
  1315.     CMP.W    #36,(A0,D0.W)
  1316.     BLO.S    saskip2
  1317.     MOVE.W    #36,(A0,D0.W)
  1318. saskip2    TST.W    D0
  1319.     BEQ.S    saskip3
  1320.     ADD.W    D3,-2(A0,D0.W)
  1321.     CMP.W    #36,-2(A0,D0.W)
  1322.     BLO.S    saskip3
  1323.     MOVE.W    #36,-2(A0,D0.W)
  1324. saskip3    CMP.W    #44,D0
  1325.     BEQ.S    saend
  1326.     ADD.W    D3,2(A0,D0.W)
  1327.     CMP.W    #36,2(A0,D0.W)
  1328.     BLO.S    saend
  1329.     MOVE.W    #36,2(A0,D0.W)
  1330. saend    SF    AnaDrawFlag
  1331.     MOVEM.L    (SP)+,D0-D3/A0
  1332.     RTS
  1333.  
  1334. AnalyzerOffsets
  1335.     dc.w $0730,$0708,$06E0,$06B8,$0690,$0668,$0640,$0618
  1336.     dc.w $05F0,$05C8,$05A0,$0578,$0550,$0528,$0500,$04D8
  1337.     dc.w $04B0,$0488,$0460,$0438,$0410,$03E8,$03C0,$0398
  1338.     dc.w $0370,$0348,$0320,$02F8,$02D0,$02A8,$0280,$0258
  1339.     dc.w $0230,$0208,$01E0,$01B8,$0190,$0168,$0140,$0118
  1340.     dc.w $00F0
  1341.  
  1342. AnaDrawFlag    dc.b 0,0
  1343.  
  1344. ;---- Scope ----
  1345.  
  1346. ns_sampleptr =  0
  1347. ns_endptr    =  4
  1348. ns_repeatptr =  8
  1349. ns_rependptr = 12
  1350. ns_period    = 16
  1351. ns_volume    = 18
  1352.  
  1353. Scope    LEA    audchan1temp,A0
  1354.     LEA    ScopeInfo,A2
  1355.     LEA    ScopeSamInfo,A1
  1356.     LEA    BlankSample,A3
  1357.     MOVEQ.L    #3,D6
  1358. ScoLoop    MOVE.W    (A0),D0
  1359.     AND.W    #$0FFF,D0
  1360.     OR.W    n_period(A0),D0
  1361.     BEQ    ScoSampleEnd ; end if no note & no period
  1362.  
  1363.     MOVE.W    n_period(A0),ns_period(A2)
  1364.     MOVE.B    n_volume(A0),ns_volume(A2)
  1365.  
  1366.  
  1367.     TST.B    n_trigger(A0)
  1368.     BEQ    ScoContinue
  1369. ScoRetrig
  1370.     SF    n_trigger(A0)
  1371.     BSR    SetScope
  1372.     MOVEQ    #0,D0
  1373.     MOVE.B    n_samplenum(A0),D0
  1374.     SUBQ.W    #1,D0
  1375.     LSL.W    #4,D0
  1376.     MOVE.L    ns_sampleptr(A1,D0.W),ns_sampleptr(A2)
  1377.     MOVE.L    ns_endptr(A1,D0.W),ns_endptr(A2)
  1378.     MOVE.L    ns_repeatptr(A1,D0.W),ns_repeatptr(A2)
  1379.     MOVE.L    ns_rependptr(A1,D0.W),ns_rependptr(A2)
  1380.     MOVE.L    ns_sampleptr(A2),D0
  1381.     CMP.L    A3,D0 ; at end of sample...
  1382.     BEQ.S    ScoNextChan
  1383.     BRA    ScoChk
  1384. ScoContinue
  1385.     MOVE.L    ns_sampleptr(A2),D0
  1386.     CMP.L    A3,D0 ; at end of sample...
  1387.     BEQ.S    ScoNextChan
  1388.     MOVEQ.L    #0,D1
  1389.     MOVE.W    ns_period(A2),D1
  1390.     LSR.W    #1,D1
  1391.     BEQ.S    ScoNextChan
  1392.     MOVE.L    #35469,D2
  1393.     DIVU    D1,D2
  1394.     EXT.L    D2
  1395.     ADD.L    D2,D0
  1396. ScoChk    CMP.L    ns_endptr(A2),D0
  1397.     BLO.S    ScoUpdatePtr
  1398.     TST.L    ns_repeatptr(A2)
  1399.     BNE.S    ScoSamLoop
  1400. ScoSampleEnd
  1401.     MOVE.L    A3,D0
  1402.     BRA.S    ScoUpdatePtr
  1403.  
  1404. ScoSamLoop
  1405.     SUB.L    ns_endptr(A2),D0
  1406.     ADD.L    ns_repeatptr(A2),D0
  1407.     MOVE.L    ns_rependptr(A2),ns_endptr(A2)
  1408.     CMP.L    ns_endptr(A2),D0
  1409.     BHS    ScoSamLoop
  1410. ScoUpdatePtr
  1411.     MOVE.L    D0,ns_sampleptr(A2)
  1412. ScoNextChan
  1413.     ADD.L    #20,A2
  1414.     ADD.L    #44,A0
  1415.     DBRA    D6,ScoLoop
  1416.  
  1417. ; now draw channels
  1418.     TST.B    ScopeEnable
  1419.     BEQ.S    clsnot
  1420.     CMP.W    #1,CurrScreen
  1421.     BNE.S    clsnot
  1422.     TST.B    EdEnable
  1423.     BNE.S    clsnot
  1424.  
  1425.     MOVE.L    TextBplPtr,A0
  1426.     ADD.L    #2256,A0
  1427.     MOVEQ    #0,D0
  1428.     MOVEQ    #32,D1
  1429. clscop1    MOVEQ    #5,D2
  1430. clscop2    MOVE.L    D0,(A0)+
  1431.     DBRA    D2,clscop2
  1432.     LEA    16(A0),A0
  1433.     DBRA    D1,clscop1
  1434.  
  1435. clsnot    MOVEQ    #-1,D4
  1436.     TST.W    SamScrEnable
  1437.     BEQ.S    ScoNClr
  1438.     MOVEQ    #0,D4
  1439. ScoNClr    MOVEQ    #0,D7
  1440.     MOVE.W    $DFF002,D6 ; dmaconr
  1441.     MOVEQ    #0,D5
  1442.     MOVE.L    #72*40+16,A1
  1443.     LEA    xBlankSample,A2
  1444.     BTST    #0,D6
  1445.     BEQ.S    ScoSkp1
  1446.     LEA    ScopeInfo,A2
  1447.     MOVE.B    ns_volume(A2),D5
  1448. ScoSkp1    BSR.S    ScoDraw
  1449.  
  1450.     MOVEQ    #0,D5
  1451.     MOVE.L    #72*40+22,A1
  1452.     LEA    xBlankSample,A2
  1453.     BTST    #1,D6
  1454.     BEQ.S    ScoSkp2
  1455.     LEA    ScopeInfo+20,A2
  1456.     MOVE.B    ns_volume(A2),D5
  1457. ScoSkp2    BSR.S    ScoDraw
  1458.  
  1459.     MOVEQ    #0,D5
  1460.     MOVE.L    #72*40+28,A1
  1461.     LEA    xBlankSample,A2
  1462.     BTST    #2,D6
  1463.     BEQ.S    ScoSkp3
  1464.     LEA    ScopeInfo+40,A2
  1465.     MOVE.B    ns_volume(A2),D5
  1466. ScoSkp3    BSR.S    ScoDraw
  1467.  
  1468.     MOVEQ    #0,D5
  1469.     MOVE.L    #72*40+34,A1
  1470.     LEA    xBlankSample,A2
  1471.     BTST    #3,D6
  1472.     BEQ.S    ScoSkp4
  1473.     LEA    ScopeInfo+60,A2
  1474.     MOVE.B    ns_volume(A2),D5
  1475. ScoSkp4    BSR    ScoDraw
  1476.     TST.L    D7
  1477.     BEQ    sdloscr
  1478. ScoRTS    RTS
  1479.  
  1480. ScoDraw    TST.B    ScopeEnable
  1481.     BEQ.S    sdlpos
  1482.     CMP.W    #1,CurrScreen
  1483.     BNE.S    sdlpos
  1484.     TST.B    EdEnable
  1485.     BNE.S    sdlpos
  1486.     LSR.W    #1,D5
  1487.     CMP.W    #32,D5
  1488.     BLS.S    sdsk1
  1489.     MOVEQ    #32,D5
  1490. sdsk1    MOVE.L    (A2),A0
  1491.     ADD.L    TextBplPtr,A1
  1492.     MOVEQ    #4,D2
  1493. sdlp1    MOVEQ    #7,D3
  1494. sdlp2    MOVE.B    (A0)+,D0    ; get byte
  1495.     EXT.W    D0        ; extend to word
  1496.     NEG.W    D0        ; negate
  1497.     MULS    D5,D0        ; multiply by volume
  1498.     ASR.W    #8,D0        ; shift down
  1499.     MOVE.W    D0,D1
  1500.     ASL.W    #5,D0        ; * 32
  1501.     ASL.W    #3,D1        ; * 8
  1502.     ADD.W    D1,D0        ; (32+8) = * 40
  1503.     BSET    D3,(A1,D0.W)    ; set a bit
  1504.     DBRA    D3,sdlp2
  1505.     ADDQ.L    #1,A1        ; yes
  1506. sdlskip    DBRA    D2,sdlp1
  1507.  
  1508. sdlpos    TST.B    D4
  1509.     BNE.S    ScoRTS
  1510.     LEA    xBlankSample(PC),A0
  1511.     CMP.L    A0,A2
  1512.     BEQ.S    sdloscr
  1513.     MOVE.L    (A2),D1
  1514.     MOVE.L    SamDrawStart(PC),D0
  1515.     CMP.L    D0,D1
  1516.     BLS.S    ScoRTS
  1517.     CMP.L    SamDrawEnd(PC),D1
  1518.     BHS.S    ScoRTS
  1519.     SUB.L    D0,D1
  1520.     MULU    #314,D1
  1521.     MOVE.L    SamDisplay,D0
  1522.     BEQ.S    ScoRTS
  1523.     DIVU    D0,D1
  1524.     ST    D4
  1525.     ST    D7
  1526.     MOVE.L    D1,D0
  1527.     ADDQ.W    #6,D0
  1528.     MOVE.W    #139,D1
  1529. sdlpspr    MOVEQ    #64,D2
  1530.     LEA    PlayPosSpriteData,A0
  1531.     JMP    SetSpritePos
  1532.  
  1533. sdloscr    MOVEQ    #0,D0
  1534.     MOVE.W    #270,D1
  1535.     BRA.S    sdlpspr
  1536.  
  1537. SetScope
  1538.     MOVEQ    #0,D1
  1539.     MOVE.B    n_samplenum(A0),D1
  1540.     SUBQ.W    #1,D1
  1541.     LSL.W    #4,D1
  1542.     LEA    ScopeSamInfo,A4
  1543.     LEA    (A4,D1.W),A4
  1544.  
  1545.     MOVE.L    n_start(A0),D0
  1546.     MOVE.L    D0,ns_sampleptr(A4)
  1547.     MOVEQ    #0,D1
  1548.     MOVE.W    n_length(A0),D1
  1549.     ADD.L    D1,D0
  1550.     ADD.L    D1,D0
  1551.     MOVE.L    D0,ns_endptr(A4)
  1552.  
  1553.     MOVE.L    n_loopstart(A0),D0
  1554.     MOVE.L    D0,ns_repeatptr(A4)
  1555.     MOVEQ    #0,D1
  1556.     MOVE.W    n_replen(A0),D1
  1557.     CMP.W    #1,D1
  1558.     BEQ.S    sconorep
  1559.     ADD.L    D1,D0
  1560.     ADD.L    D1,D0
  1561.     MOVE.L    D0,ns_rependptr(A4)
  1562.     BRA    Return1
  1563. sconorep
  1564.     CLR.L    ns_repeatptr(A4)
  1565.     RTS
  1566.  
  1567. ToggleAnaScope
  1568.     TST.W    notogfl
  1569.     BNE    return1
  1570.     BSR    WaitForButtonUp
  1571.     MOVEQ    #0,D4
  1572.     TST.B    AnaScopFlag
  1573.     BNE.S    tasana
  1574.     ST    AnaScopFlag
  1575.     BRA    RedrawAnaScope
  1576. tasana    SF    AnaScopFlag
  1577.     BRA    RedrawAnaScope
  1578.  
  1579. ScopeEnable    dc.b 0
  1580. AnaScopFlag    dc.b 1
  1581. xBlankSample    dc.l BlankSample
  1582. SamDrawStart    dc.l 0
  1583. SamDrawEnd    dc.l 0
  1584.  
  1585. ;---- Show Free/Tune Memory ----
  1586.  
  1587. DoShowFreeMem
  1588.     MOVE.W    #1,UpdateFreeMem
  1589. ShowFreeMem
  1590.     MOVEM.L    D0-D7/A0-A6,-(SP)
  1591.     TST.W    UpdateFreeMem
  1592.     BEQ.S    sfmskp
  1593.     CLR.W    UpdateFreeMem
  1594.     CLR.L    FreeMemory
  1595.     CLR.L    TuneMemory
  1596. sfmskp    BSR    ShowTuneMem
  1597.     MOVEQ    #MEMF_CHIP,D1
  1598.     TST.B    ShowPublicFlag
  1599.     BEQ    sfmskp2
  1600.     MOVEQ    #MEMF_PUBLIC,D1
  1601. sfmskp2    MOVE.L    4.W,A6
  1602.     JSR    LVOAvailMem(A6)
  1603.     CMP.L    FreeMemory(PC),D0
  1604.     BEQ.S    fremend
  1605.     MOVE.L    D0,FreeMemory
  1606.     TST.B    ShowDecFlag
  1607.     BNE.S    shfrdec
  1608.     MOVE.L    D0,D6
  1609.     MOVE.W    #5273,TextOffset
  1610.     SWAP    D0
  1611.     AND.W    #$FF,D0
  1612.     MOVE.W    D0,WordNumber
  1613.     JSR    PrintHexByte
  1614.     MOVE.W    D6,WordNumber
  1615.     JSR    PrintHexWord
  1616. fremend    MOVEM.L    (SP)+,D0-D7/A0-A6
  1617.     RTS
  1618.  
  1619. shfrdec    MOVE.L    FreeMemory(PC),D0
  1620.     MOVE.W    #5273,TextOffset
  1621.     JSR    Print6DecDigits
  1622.     BRA.S    fremend
  1623.  
  1624. ShowTuneMem
  1625.     MOVE.L    SongDataPtr,A0
  1626.     LEA    42(A0),A0
  1627.     MOVE.W    TuneUp(PC),D7
  1628.     SUBQ.W    #1,D7
  1629.     MOVE.W    #31,TuneUp
  1630.     MOVEQ    #0,D0    ; Zero length
  1631. stumeloop
  1632.     MOVEQ    #0,D1
  1633.     MOVE.W    (A0),D1
  1634.     ASL.W    #1,D1
  1635.     ADD.L    D1,D0    ; Add samplelength
  1636.     ADD.L    #30,A0
  1637.     DBRA    D7,stumeloop
  1638.     ADD.L    #1084,D0    ; Add 1084 to length
  1639.     MOVE.L    SongDataPtr,A0
  1640.     MOVEQ    #127,D7
  1641.     ADD.L    #952,A0
  1642.     MOVEQ    #0,D6
  1643. stumeloop2
  1644.     MOVE.B    (A0)+,D5
  1645.     CMP.B    D5,D6
  1646.     BHI.S    stumeskip
  1647.     MOVE.B    D5,D6
  1648. stumeskip
  1649.     DBRA    D7,stumeloop2
  1650.     ADDQ.W    #1,D6
  1651.     ASL.L    #8,D6
  1652.     ASL.L    #2,D6
  1653.     ADD.L    D6,D0    ; Add 1024 x Number of patterns
  1654.     CMP.L    TuneMemory(PC),D0
  1655.     BEQ    Return1
  1656.     MOVE.L    D0,TuneMemory
  1657.     TST.B    ShowDecFlag
  1658.     BNE.S    shtudec
  1659.     MOVE.L    D0,D6
  1660.     MOVE.W    #4993,TextOffset
  1661.     SWAP    D0
  1662.     AND.W    #$FF,D0
  1663.     MOVE.W    D0,WordNumber
  1664.     JSR    PrintHexByte
  1665.     MOVE.W    D6,WordNumber
  1666.     JMP    PrintHexWord
  1667.  
  1668. shtudec    MOVE.L    TuneMemory(PC),D0
  1669.     MOVE.W    #4993,TextOffset
  1670.     JMP    Print6DecDigits
  1671.  
  1672. UpdateFreeMem    dc.w    0
  1673. FreeMemory    dc.l    0
  1674. TuneMemory    dc.l    0
  1675. TuneUp        dc.w    31
  1676.  
  1677. ;---- Audio Channel Toggles ----
  1678.  
  1679. CheckToggle
  1680.     MOVE.W    MouseY2,D0
  1681.     CMP.W    #1,CurrScreen
  1682.     BNE    Return1
  1683.     CMP.W    #44,D0
  1684.     BHS    Return1
  1685. DoToggleMute
  1686.     CMP.W    #34,D0
  1687.     BHS.S    ToggleCh4
  1688.     CMP.W    #23,D0
  1689.     BHS.S    ToggleCh3
  1690.     CMP.W    #12,D0
  1691.     BHS.S    ToggleCh2
  1692. ToggleCh1
  1693.     LEA    audchan1toggle(PC),A0
  1694.     BRA.S    TogCh
  1695. ToggleCh2
  1696.     LEA    audchan2toggle(PC),A0
  1697.     BRA.S    TogCh
  1698. ToggleCh3
  1699.     LEA    audchan3toggle(PC),A0
  1700.     BRA.S    TogCh
  1701. ToggleCh4
  1702.     LEA    audchan4toggle(PC),A0
  1703. TogCh    CLR.B    RawKeyCode
  1704.     EOR.W    #1,(A0)
  1705.     BSR    WaitForButtonUp
  1706.     CLR.W    D0
  1707.     MOVE.W    audchan4toggle(PC),D0
  1708.     LSL.B    #1,D0
  1709.     OR.W    audchan3toggle(PC),D0
  1710.     LSL.B    #1,D0
  1711.     OR.W    audchan2toggle(PC),D0
  1712.     LSL.B    #1,D0
  1713.     OR.W    audchan1toggle(PC),D0
  1714.     MOVE.W    D0,ActiveChannels
  1715.     BSR.S    RedrawToggles
  1716.     BSR    Wait_4000
  1717.     BRA    Wait_4000
  1718.  
  1719. RedrawToggles
  1720.     CMP.W    #1,CurrScreen
  1721.     BNE    Return1
  1722.     LEA    audchan1toggle(PC),A0
  1723.     BSR.S    RedrawSingleTogg
  1724.     LEA    audchan2toggle(PC),A0
  1725.     BSR.S    RedrawSingleTogg
  1726.     LEA    audchan3toggle(PC),A0
  1727.     BSR.S    RedrawSingleTogg
  1728.     LEA    audchan4toggle(PC),A0
  1729. RedrawSingleTogg
  1730.     LEA    BitplaneData,A1
  1731.     MOVEQ    #0,D0
  1732.     MOVE.W    2(A0),D0
  1733.     ADD.L    D0,A1
  1734.     MOVEQ    #0,D0
  1735.     MOVE.W    4(A0),D0
  1736.     LEA    ToggleONdata,A2
  1737.     TST.W    (A0)
  1738.     BNE.S    rtskip
  1739.     LEA    ToggleOFFdata,A2
  1740. rtskip    ADD.L    D0,A2
  1741.     MOVEQ    #10,D4
  1742. rtloop2    MOVE.W    88(A2),10240(A1)
  1743.     MOVE.W    (A2)+,(A1)
  1744.     LEA    40(A1),A1
  1745.     DBRA    D4,rtloop2
  1746.     RTS
  1747.  
  1748. rtdoit    MOVEQ    #10,D4
  1749. rtloop    MOVE.W    132(A2),10240(A1)
  1750.     MOVE.W    (A2)+,(A1)
  1751.     LEA    40(A1),A1
  1752.     DBRA    D4,rtloop
  1753.     RTS
  1754.  
  1755. ;---- VU Meters ----
  1756.  
  1757. VUmeters
  1758.     LEA    audchan1temp,A1
  1759.     LEA    VUSpriteData1,A2
  1760.     MOVE.W    audchan1toggle(PC),D0
  1761.     BSR.S    OneVUmeter
  1762.     LEA    audchan2temp,A1
  1763.     LEA    VUSpriteData2,A2
  1764.     MOVE.W    audchan2toggle(PC),D0
  1765.     BSR.S    OneVUmeter
  1766.     LEA    audchan3temp,A1
  1767.     LEA    VUSpriteData3,A2
  1768.     MOVE.W    audchan3toggle,D0
  1769.     BSR.S    OneVUmeter
  1770.     LEA    audchan4temp,A1
  1771.     LEA    VUSpriteData4,A2
  1772.     MOVE.W    audchan4toggle,D0
  1773. OneVUmeter
  1774.     TST.L    RunMode
  1775.     BEQ.S    VUmeterDown
  1776.     TST.W    (A1)
  1777.     BEQ.S    VUmeterDown
  1778.     TST.W    D0
  1779.     BEQ.S    VUmeterDown
  1780.     TST.L    Counter
  1781.     BNE.S    VUmeterDown
  1782.     MOVEQ    #0,D0    ; New note
  1783.     MOVE.B    n_volume(A1),D0    ; Get volume
  1784.     CMP.W    #$40,D0    ; Higher than $40 ?
  1785.     BLS.S    iccskip    ; No, skip
  1786.     MOVEQ    #$40,D0    ; Yes, set to $40
  1787. iccskip    LEA    VUmeterHeights(PC),A3
  1788.     MOVE.B    #233,D7        ; Set to 233
  1789.     SUB.B    0(A3,D0.W),D7    ; Subtract to get new height
  1790.     MOVE.B    D7,(A2)
  1791.     RTS
  1792.  
  1793. VUmeterDown
  1794.     CMP.B    #233,(A2)
  1795.     BEQ    Return1
  1796.     ADDQ.B    #1,(A2)
  1797.     RTS    
  1798.  
  1799. audchan1toggle    dc.w    1,78,0
  1800. Chan1Volume    dc.w    0
  1801. audchan2toggle    dc.w    1,518,$16
  1802. Chan2Volume    dc.w    0
  1803. audchan3toggle    dc.w    1,958,$2C
  1804. Chan3Volume    dc.w    0
  1805. audchan4toggle    dc.w    1,1398,$42
  1806. Chan4Volume    dc.w    0
  1807. ActiveChannels    dc.w    15
  1808.  
  1809. VUmeterHeights
  1810.     dc.b    0,0,1,2,2,3,4,5,5,6,7,8,8,9,10,11
  1811.     dc.b    11,12,13,14,14,15,16,17,17,18,19,20,20,21,22,23
  1812.     dc.b    23,24,25,26,26,27,28,29,29,30,31,32,32,33,34,35
  1813.     dc.b    35,36,37,38,38,39,40,41,41,42,43,44,44,45,46,47
  1814.     dc.b    47,0
  1815.  
  1816. SetAnalyzerVolumes
  1817.     MOVEM.L    D0-D3/A0,-(SP)
  1818.     LSL.W    #8,D2
  1819.     DIVU    #640,D2
  1820.     CMP.W    #$F0A0,A5
  1821.     BNE.S    savCh2
  1822.     TST.W    audchan1toggle
  1823.     BEQ.S    savCh2
  1824.     CMP.W    Chan1Volume,D2 ; volume
  1825.     BLO.S    savCh2
  1826.     MOVE.W    D2,Chan1Volume
  1827. savCh2    CMP.W    #$F0B0,A5
  1828.     BNE.S    savCh3
  1829.     TST.W    audchan2toggle
  1830.     BEQ.S    savCh3
  1831.     CMP.W    Chan2Volume,D2
  1832.     BLO.S    savCh3
  1833.     MOVE.W    D2,Chan2Volume
  1834. savCh3    CMP.W    #$F0C0,A5
  1835.     BNE.S    savCh4
  1836.     TST.W    audchan3toggle
  1837.     BEQ.S    savCh4
  1838.     CMP.W    Chan3Volume,D2
  1839.     BLO.S    savCh4
  1840.     MOVE.W    D2,Chan3Volume
  1841. savCh4    CMP.W    #$F0D0,A5
  1842.     BNE.S    savNone
  1843.     TST.W    audchan4toggle
  1844.     BEQ.S    savNone
  1845.     CMP.W    Chan4Volume,D2
  1846.     BLO.S    savNone
  1847.     MOVE.W    D2,Chan4Volume
  1848. savNone    MOVEM.L    (SP)+,D0-D3/A0
  1849.     MOVEQ    #1,D4
  1850.     RTS
  1851.  
  1852. ;---- Disk Op. ----
  1853.  
  1854. DiskOp    CLR.B    RawKeyCode
  1855.     MOVE.W    CurrScreen,D0
  1856.     CMP.W    #3,D0
  1857.     BEQ    ExitFromDir
  1858.     CMP.W    #1,D0
  1859.     BNE    Return1
  1860. ShowDirScreen
  1861.     BSR    WaitForButtonUp
  1862.     MOVE.W    #3,CurrScreen
  1863.     ST    DisableAnalyzer
  1864.     ST    NoSampleInfo
  1865.     JSR    ClearAnalyzerColors
  1866.     BSR    Clear100Lines
  1867.     BSR.S    SwapDirScreen
  1868.     BEQ    DisplayMainAll
  1869.     BSR    ShowDiskSpace
  1870.     BSR    ShowModPackMode
  1871.     BSR    ShowPackMode
  1872.     BSR    ShowRAWIFFmode
  1873. DoAutoDir
  1874.     TST.B    AutoDirFlag
  1875.     BEQ    SelectPath
  1876.     MOVE.W    DirPathNum,D0 
  1877.     BEQ    LoadModuleGadg
  1878.     CMP.W    #1,D0
  1879.     BEQ    LoadSongGadg
  1880.     CMP.W    #2,D0
  1881.     BEQ    LoadSampleGadg
  1882.     BRA    SelectModules
  1883. SelectPath
  1884.     MOVE.W    DirPathNum,D0 
  1885.     BEQ    SelectModules
  1886.     CMP.W    #1,D0
  1887.     BEQ    SelectSongs
  1888.     BRA    SelectSamples
  1889.  
  1890. SwapDirScreen
  1891.     MOVE.L    DecompMemPtr,D0
  1892.     BEQ.S    sdirs2
  1893.     MOVE.L    D0,A1
  1894.     BSR.S    ssets3
  1895.     BRA    FreeDecompMem
  1896. sdirs2    LEA    DirScreenData,A0
  1897.     MOVE.L    #DirScreenSize,D0
  1898.     BSR    Decompact
  1899.     BEQ    Return1
  1900. ssets3    LEA    BitplaneData,A0
  1901.     MOVEQ    #1,D2
  1902. sxloop1    MOVE.W    #999,D0
  1903. sxloop2    MOVE.L    (A0),D1
  1904.     MOVE.L    (A1),(A0)+
  1905.     MOVE.L    D1,(A1)+
  1906.     DBRA    D0,sxloop2
  1907.     LEA    6240(A0),A0
  1908.     DBRA    D2,sxloop1
  1909.     RTS
  1910.  
  1911. CheckDirGadgets
  1912.     MOVEM.W    MouseX2,D0/D1
  1913.     CMP.W    #44,D1
  1914.     BHI    CheckDirGadgets2
  1915.     CMP.W    #33,D1
  1916.     BLS.S    ExtrasMenu
  1917.     CMP.W    #11,D0
  1918.     BLO    DirBrowseGadg
  1919.     CMP.W    #187,D0
  1920.     BLO    DirPathGadg
  1921.     CMP.W    #216,D0
  1922.     BLO    ParentDirGadg
  1923.     CMP.W    #307,D0
  1924.     BLO    ShowFreeDiskGadg
  1925.     BRA    CheckDirGadgets2
  1926.  
  1927. ExtrasMenu
  1928.     CMP.W    #94,D0
  1929.     BHS    ToggleMenu
  1930.     CMP.W    #22,D1
  1931.     BHI.S    DeleteFileGadg
  1932.     CMP.W    #11,D1
  1933.     BHI.S    RenameFileGadg
  1934.     BRA    DiskFormatGadg
  1935.  
  1936. RenameFileGadg
  1937.     BSR    StorePtrCol
  1938.     BSR    WaitForButtonUp
  1939.     BSR    ClearFileNames
  1940.     MOVE.L    PathPtr,A4
  1941.     BSR    ShowDirPath
  1942.     LEA    FileNamesPtr(PC),A5
  1943.     BSR    HasDiskChanged
  1944.     BEQ.S    RenameFileDirOk
  1945.     BSR    ClearDirTotal
  1946.     BSR    DirDisk
  1947.     BNE    RestorePtrCol
  1948.  
  1949. RenameFileDirOk
  1950.     MOVE.W    FileNameScrollPos,D0
  1951.     BSR    RedrawFileNames
  1952.     MOVE.W    #10,Action
  1953.     LEA    SelectFileText,A0
  1954.     JSR    ShowStatusText
  1955.     BRA    RestorePtrCol
  1956.  
  1957. DeleteFileGadg
  1958.     MOVE.W    DirPathNum,D0
  1959.     BEQ    DeleteModuleGadg
  1960.     CMP.W    #1,D0
  1961.     BEQ    DeleteSongGadg
  1962.     CMP.W    #2,D0
  1963.     BEQ    DeleteSampleGadg
  1964.     RTS
  1965.  
  1966. ToggleMenu
  1967.     CMP.W    #146,D0
  1968.     BHS    SelectMenu
  1969.     CMP.W    #22,D1
  1970.     BHI    ToggleIFFSave
  1971.     CMP.W    #11,D1
  1972.     BHI.S    ToggleSongPack
  1973. ToggleModPack
  1974.     CLR.B    ModPackMode
  1975.     BSR    ShowNotImpl
  1976. ShowModPackMode
  1977.     LEA    ToggleOFFText(PC),A0
  1978.     TST.B    ModPackMode
  1979.     BEQ.S    smpmskp
  1980.     LEA    ToggleONText2(PC),A0
  1981. smpmskp    MOVEQ    #3,D0
  1982.     MOVE.W    #175,D1
  1983.     JSR    ShowText3
  1984.     BRA    WaitForButtonUp
  1985.  
  1986. ShowNotImpl
  1987.     LEA    NotImplText(PC),A0
  1988.     JSR    ShowStatusText
  1989.     BRA    SetErrorPtrCol
  1990.  
  1991. NotImplText    dc.b    'Not implemented',0
  1992.  
  1993. ToggleSongPack
  1994.     EOR.B    #1,PackMode
  1995. ShowPackMode
  1996.     LEA    ToggleOFFText(PC),A0
  1997.     TST.B    PackMode
  1998.     BEQ.S    spsskip
  1999.     LEA    ToggleONText2(PC),A0
  2000. spsskip    MOVEQ    #3,D0
  2001.     MOVE.W    #615,D1
  2002.     JSR    ShowText3
  2003.     BRA    WaitForButtonUp
  2004.  
  2005. ToggleIFFSave
  2006.     EOR.B    #1,RAWIFFMode
  2007. ShowRAWIFFMode
  2008.     LEA    RAWText(PC),A0
  2009.     TST.B    RAWIFFMode
  2010.     BEQ.S    sraffu
  2011.     LEA    IFFText(PC),A0
  2012. sraffu    MOVEQ    #3,D0
  2013.     MOVE.W    #1055,D1
  2014.     JSR    ShowText3
  2015.     BRA    WaitForButtonUp
  2016.  
  2017. RAWText    dc.b "RAW",0
  2018. IFFText    dc.b "IFF",0
  2019.  
  2020. SelectMenu
  2021.     CMP.W    #156,D0
  2022.     BHS    LoadMenu
  2023.     CMP.W    #22,D1
  2024.     BHI    SelectSamples
  2025.     CMP.W    #11,D1
  2026.     BHI    SelectSongs
  2027.     BRA    SelectModules
  2028.  
  2029. LoadMenu
  2030.     CMP.W    #238,D0
  2031.     BHS.S    SaveMenu
  2032.     CMP.W    #22,D1
  2033.     BHI    LoadSampleGadg
  2034.     CMP.W    #11,D1
  2035.     BHI    LoadSongGadg
  2036.     BRA    LoadModuleGadg
  2037.  
  2038. SaveMenu
  2039.     CMP.W    #22,D1
  2040.     BHI    SaveSampleGadg
  2041.     CMP.W    #11,D1
  2042.     BHI    SaveSongGadg
  2043.     BRA    SaveModuleGadg
  2044.  
  2045. CheckDirGadgets2
  2046.     MOVEM.W    MouseX2,D0/D1
  2047.     CMP.W    #3,CurrScreen
  2048.     BNE    Return1
  2049.     CMP.W    #307,D0
  2050.     BLO    FileNamePressed
  2051.     CMP.W    #44,D1
  2052.     BLS    FileNameOneUp
  2053.     CMP.W    #89,D1
  2054.     BLO.S    ExitFromDir
  2055.     BRA    FileNameOneDown
  2056.  
  2057. ExitFromDir
  2058.     BSR    WaitForButtonUp
  2059.     CLR.B    RawKeyCode
  2060.     BSR    SwapDirScreen
  2061.     BSR    Clear100Lines
  2062. DisplayMainAll
  2063.     BSR    DisplayMainScreen
  2064.     JSR    ShowSongLength
  2065.     JSR    ShowSampleInfo
  2066.     JSR    ShowSongName
  2067.     BSR    Show_MS
  2068.     TST.W    LoadInProgress
  2069.     BNE.S    dimaskp
  2070.     JSR    ShowAllRight
  2071. dimaskp    JMP    ShowPosition
  2072.  
  2073. DirBrowseGadg
  2074.     MOVEQ    #0,D3
  2075.     MOVE.W    DirPathNum,D3
  2076.     LEA    dpnum(PC),A0
  2077.     ADD.L    D3,A0
  2078.     MOVEQ    #0,D0
  2079.     MOVE.B    (A0),D0
  2080.     ADDQ.B    #1,D0
  2081.     CMP.B    #7,D0
  2082.     BLO.S    dbgskip
  2083.     MOVEQ    #0,D0
  2084. dbgskip    MOVE.B    D0,(A0)
  2085.     MULU    #5,D0
  2086.     MOVE.L    PathPtr,A0
  2087.     MOVEQ    #63,D1
  2088.     MOVEQ    #0,D2
  2089. dbglop1    MOVE.B    D2,(A0)+
  2090.     DBRA    D1,dbglop1
  2091.     LEA    dirpaths(PC),A0
  2092.     LEA    -5(A0,D0.W),A0
  2093.     TST.W    D0
  2094.     BNE.S    dbgskp2
  2095.     LEA    ModulesPath,A0
  2096.     TST.W    D3
  2097.     BEQ.S    dbgskp2
  2098.     LEA    SongsPath,A0
  2099.     CMP.W    #1,D3
  2100.     BEQ.S    dbgskp2
  2101.     LEA    SamplePath,A0
  2102. dbgskp2    MOVE.L    PathPtr,A1
  2103. dbglop2    MOVE.B    (A0)+,(A1)+
  2104.     BNE.S    dbglop2
  2105.     BSR    ShowDirPath
  2106.     MOVE.W    #3,WaitTime
  2107.     BRA    WaitALittle
  2108.  
  2109. dirpaths
  2110.     dc.b "DF0:",0,"DF1:",0,"DH0:",0,"DH1:",0,"RAM:",0,"ST-00:",0
  2111. dpnum    dc.b 0,0,0,0
  2112. DirPathNum
  2113.     dc.w 3
  2114.  
  2115. SelectModules
  2116.     MOVEQ    #0,D0
  2117.     BRA.S    ChangePath
  2118. SelectSongs
  2119.     MOVEQ    #1,D0
  2120.     BRA.S    ChangePath
  2121. SelectSamples
  2122.     MOVEQ    #2,D0
  2123. ChangePath
  2124.     MOVE.L    TextBplPtr,A0
  2125.     LEA    178(A0),A0
  2126.     MOVEQ    #0,D2
  2127.     MOVEQ    #26,D1
  2128. chpalop    MOVE.W    D2,(A0)
  2129.     LEA    40(A0),A0
  2130.     DBRA    D1,chpalop
  2131.     LEA    ModulesPath2,A4
  2132.     MOVE.W    #178,D1
  2133.     MOVE.W    D0,DirPathNum
  2134.     BEQ.S    chpaski
  2135.     LEA    SongsPath2,A4
  2136.     MOVE.W    #618,D1
  2137.     CMP.W    #1,D0
  2138.     BEQ.S    chpaski
  2139.     LEA    SamplePath2,A4
  2140.     MOVE.W    #1058,D1
  2141. chpaski    MOVE.L    TextBplPtr,A0
  2142.     LEA    (A0,D1.W),A0
  2143.     MOVE.W    #$0100,(A0)
  2144.     MOVE.W    #$0F80,40(A0)
  2145.     MOVE.W    #$0FC0,80(A0)
  2146.     MOVE.W    #$0F80,120(A0)
  2147.     MOVE.W    #$0100,160(A0)
  2148.     MOVE.L    A4,PathPtr
  2149.     BSR    ShowDirPath
  2150.     BRA    WaitForButtonUp
  2151.  
  2152. ;---- Song Gadgets ----
  2153.  
  2154. LoadSongGadg
  2155.     BSR    StorePtrCol
  2156.     BSR    WaitForButtonUp
  2157.     BSR    ClearFileNames
  2158.     BSR    SelectSongs
  2159.     LEA    FileNamesPtr(PC),A5
  2160.     BSR    HasDiskChanged
  2161.     BEQ    LoadSongDirOk
  2162.     BSR    ClearDirTotal
  2163.     BSR    DirDisk
  2164.     BNE    RestorePtrCol
  2165. LoadSongDirOk
  2166.     MOVE.W    FileNameScrollPos,D0
  2167.     BSR    RedrawFileNames
  2168.     MOVE.W    #1,Action
  2169.     LEA    SelectSongText,A0
  2170.     JSR    ShowStatusText
  2171.     BRA    RestorePtrCol
  2172.  
  2173. SaveSongGadg
  2174.     BSR    SelectSongs
  2175.     LEA    SaveSongText,A0
  2176.     BSR    AreYouSure
  2177.     BNE    Return1
  2178.     BSR    RestorePtrCol
  2179.     BSR    ClearFileNames
  2180.     BSR    StopIt
  2181.     JSR    SaveSong
  2182.     MOVE.W    #1,Action
  2183.     RTS
  2184.  
  2185. DeleteSongGadg
  2186.     BSR    WaitForButtonUp
  2187.     BSR    ClearFileNames
  2188.     BSR    SelectSongs
  2189.     LEA    FileNamesPtr(PC),A5
  2190.     BSR    HasDiskChanged
  2191.     BEQ.S    DeleteSongDirOk
  2192.     BSR    ClearDirTotal
  2193.     BSR    DirDisk
  2194.     BEQ.S    DeleteSongDirOk
  2195.     BRA    RestorePtrCol
  2196.  
  2197. DeleteSongDirOk
  2198.     MOVE.W    FileNameScrollPos,D0
  2199.     BSR    RedrawFileNames
  2200.     MOVE.W    #2,Action
  2201.     LEA    SelectSongText,A0
  2202.     JSR    ShowStatusText
  2203.     BRA    SetDeletePtrCol
  2204.  
  2205. ;---- Module Gadgets ----
  2206.  
  2207. LoadModuleGadg
  2208.     BSR    StorePtrCol
  2209.     BSR    WaitForButtonUp
  2210.     BSR    ClearFileNames
  2211.     BSR    SelectModules
  2212.     LEA    FileNamesPtr(PC),A5
  2213.     BSR    HasDiskChanged
  2214.     BEQ.S    LoadModDirOk
  2215.     BSR    ClearDirTotal
  2216.     BSR    DirDisk
  2217.     BEQ.S    LoadModDirOk
  2218.     BRA    RestorePtrCol
  2219.  
  2220. LoadModDirOk
  2221.     MOVE.W    FileNameScrollPos,D0
  2222.     BSR    RedrawFileNames
  2223.     MOVE.W    #3,Action
  2224.     LEA    SelectModuleText,A0
  2225.     JSR    ShowStatusText
  2226.     BRA    RestorePtrCol
  2227.  
  2228. SaveModuleGadg
  2229.     BSR    SelectModules
  2230.     LEA    SaveModuleText,A0
  2231.     BSR    AreYouSure
  2232.     BNE    Return1
  2233.     JSR    SaveModule
  2234.     MOVE.W    #3,Action
  2235.     JMP    ShowAllRight
  2236.  
  2237. DeleteModuleGadg
  2238.     BSR    WaitForButtonUp
  2239.     BSR    ClearFileNames
  2240.     BSR    SelectModules
  2241.     LEA    FileNamesPtr(PC),A5
  2242.     BSR    HasDiskChanged
  2243.     BEQ.S    DeleteModDirOk
  2244.     BSR    ClearDirTotal
  2245.     BSR    DirDisk
  2246.     BEQ.S    DeleteModDirOk
  2247.     BRA    RestorePtrCol
  2248.  
  2249. DeleteModDirOk
  2250.     MOVE.W    FileNameScrollPos(PC),D0
  2251.     BSR    RedrawFileNames
  2252.     MOVE.W    #4,Action
  2253.     LEA    SelectModuleText,A0
  2254.     JSR    ShowStatusText
  2255.     BRA    SetDeletePtrCol
  2256.  
  2257. ;---- Sample Gadgets ----
  2258.  
  2259. LoadSampleGadg
  2260.     BSR    StorePtrCol
  2261.     BSR    WaitForButtonUp
  2262.     BSR    ClearFileNames
  2263.     BSR    SelectSamples
  2264.     LEA    FileNamesPtr(PC),A5
  2265.     BSR    HasDiskChanged
  2266.     BEQ.S    LoadSampleDirOk
  2267.     BSR    ClearDirTotal
  2268.     BSR    DirDisk
  2269.     BEQ.S    LoadSampleDirOk
  2270.     BRA    RestorePtrCol
  2271.  
  2272. LoadSampleDirOk
  2273.     MOVE.W    FileNameScrollPos,D0
  2274.     BSR    RedrawFileNames
  2275.     MOVE.W    #5,Action
  2276.     LEA    SelectSampleText,A0
  2277.     JSR    ShowStatusText
  2278.     BRA    RestorePtrCol
  2279.  
  2280. SaveSampleGadg
  2281.     BSR    SelectSamples
  2282.     CLR.B    RawKeyCode
  2283.     MOVE.W    InsNum,D0
  2284.     BEQ    NotSampleNull
  2285.     LEA    SaveSampleText,A0
  2286.     BSR    AreYouSure
  2287.     BNE    Return1
  2288.     BSR    StorePtrCol
  2289.     BSR    CreateSampleName
  2290.     MOVEQ    #0,D1
  2291.     MOVE.W    InsNum,D1
  2292.     LSL.L    #2,D1
  2293.     LEA    SamplePtrs,A0
  2294.     MOVE.L    0(A0,D1.W),DiskDataPtr
  2295.  
  2296.     BSR    SetDiskPtrCol
  2297.     MOVE.L    DOSbase,A6
  2298.     MOVE.L    FileNamePtr,D1
  2299.     MOVE.L    #1006,D2
  2300.     JSR    LVOOpen(A6)
  2301.     MOVE.L    D0,FileHandle
  2302.     BNE    SaveSample
  2303.     JSR    CantOpenFile
  2304.     BRA    ErrorRestoreCol
  2305.  
  2306. SaveSample
  2307.     LEA    SavingSampleText,A0
  2308.     JSR    ShowStatusText
  2309.     TST.B    RAWIFFMode
  2310.     BEQ    savesam
  2311.     MOVE.L    FileHandle,D1
  2312.     MOVE.L    #IFFFORM,D2
  2313.     MOVEQ    #IFFEND-IFFFORM,D3
  2314.     JSR    LVOWrite(A6)
  2315. savesam    MOVE.L    FileHandle,D1
  2316.     MOVE.L    DiskDataPtr,D2
  2317.     MOVE.L    DiskDataLength,D3
  2318.     JSR    LVOWrite(A6)
  2319.  
  2320.     MOVE.L    FileHandle,D1
  2321.     JSR    LVOClose(A6)
  2322.     CLR.L    FileHandle
  2323.     MOVE.W    #5,Action
  2324.     JSR    ShowAllRight
  2325.     BRA    RestorePtrCol
  2326.  
  2327. IFFFORM    dc.b    "FORM"
  2328.     dc.l    0
  2329.     dc.b    "8SVX"
  2330. IFFVHDR    dc.b    "VHDR"
  2331.     dc.l    20
  2332.     dc.l    0,0,32    ; oneshot, repeat, hisamples
  2333.     dc.w    16726    ; This is really NTSC (16574 for PAL!!!)
  2334.     dc.b    1,0    ; octaves, compression
  2335.     dc.l    $10000    ; volume
  2336. IFFNAME    dc.b    "NAME"
  2337.     dc.l    24
  2338.     dcb.b    24,0
  2339.     dc.b    "ANNO"
  2340.     dc.l    16
  2341.     dc.b    "Protracker 2.0A",0
  2342. IFFBODY    dc.b    "BODY"
  2343.     dc.l    0
  2344. IFFEND
  2345.  
  2346.  
  2347. ;---- Delete Sample ----
  2348.  
  2349. DeleteSampleGadg
  2350.     BSR    StorePtrCol
  2351.     BSR    WaitForButtonUp
  2352.     BSR    ClearFileNames
  2353.     BSR    SelectSamples
  2354.     LEA    FileNamesPtr(PC),A5
  2355.     BSR    HasDiskChanged
  2356.     BEQ.S    DeleteSamDirOk
  2357.     BSR    ClearDirTotal
  2358.     BSR    DirDisk
  2359.     BEQ.S    DeleteSamDirOk
  2360.     BRA    RestorePtrCol
  2361.  
  2362. DeleteSamDirOk
  2363.     MOVE.W    FileNameScrollPos(PC),D0
  2364.     BSR    RedrawFileNames
  2365.     MOVE.W    #6,Action
  2366.     LEA    SelectSampleText,A0
  2367.     JSR    ShowStatusText
  2368.     BRA    SetDeletePtrCol
  2369.  
  2370. ;---- Directory Path Gadget ----
  2371.  
  2372. DirPathGadg
  2373.     BSR    StorePtrCol
  2374.     BSR    SetWaitPtrCol
  2375.     MOVE.L    PathPtr,A6
  2376.     MOVE.L    A6,ShowTextPtr
  2377.     MOVE.L    A6,TextEndPtr
  2378.     ADD.L    #63,TextEndPtr
  2379.     MOVE.W    #19,TextLength
  2380.     MOVE.W    #1484,A4
  2381.     BSR    GetTextLine
  2382.     BRA    RestorePtrCol
  2383.  
  2384.  
  2385. CopyPath
  2386.     LEA    FileName,A1
  2387.     TST.B    (A0)        ; If no path
  2388.     BEQ    Return1
  2389. cploop    MOVE.B    (A0)+,(A1)+    ; Copy path to filename
  2390.     BNE.S    cploop
  2391.     CMP.B    #':',-2(A1)    ; If ending with ':' it's ok
  2392.     BEQ.S    PathCharBack
  2393.     CMP.B    #'/',-2(A1)    ; If ending with '/' it's ok
  2394.     BEQ.S    PathCharBack
  2395.     MOVE.B    #'/',-1(A1)    ; Add '/' to end path
  2396.     RTS
  2397.  
  2398. PathCharBack
  2399.     SUBQ.L    #1,A1
  2400.     RTS
  2401.  
  2402. ShowDirPath
  2403.     CMP.W    #3,CurrScreen
  2404.     BNE    Return1
  2405.     MOVEM.L    D0-D7/A0-A6,-(SP)
  2406.     MOVE.L    PathPtr,A0
  2407.     MOVEQ    #19,D0
  2408.     MOVE.W    #1484,D1
  2409.     JSR    ShowText3
  2410.     MOVEM.L    (SP)+,D0-D7/A0-A6
  2411.     RTS
  2412.  
  2413. ;---- File List Gadgets ----
  2414.  
  2415. FileNameOneUp
  2416.     TST.W    Action
  2417.     BEQ    Return1
  2418.     LEA    FileNamesPtr(PC),A5
  2419.     MOVE.W    FileNameScrollPos(PC),D0
  2420.     BEQ    Return1
  2421.     SUBQ.W    #1,D0
  2422.     BTST    #2,$DFF016
  2423.     BNE    RedrawFileNames
  2424.     SUBQ.W    #3,D0
  2425.     BPL    RedrawFileNames
  2426.     MOVEQ    #0,D0
  2427.     BRA    RedrawFileNames
  2428.  
  2429. FileNameOneDown
  2430.     TST.W    Action
  2431.     BEQ    Return1
  2432.     LEA    FileNamesPtr(PC),A5
  2433.     MOVE.W    FileNameScrollPos(PC),D0
  2434.     ADDQ.W    #1,D0
  2435.     BTST    #2,$DFF016
  2436.     BNE.S    fnod2
  2437.     ADDQ.W    #3,D0
  2438. fnod2    MOVE.W    16(A5),D1
  2439.     SUBQ.W    #8,D1
  2440.     BMI    Return1
  2441.     CMP.W    D1,D0
  2442.     BLS    RedrawFileNames
  2443.     MOVE.W    D1,D0
  2444.     BRA    RedrawFileNames
  2445.  
  2446. ;---- Clicked on a filename ----
  2447.  
  2448. FileNamePressed
  2449.     SUB.W    #44,D1
  2450.     MOVE.W    #1,UpdateFreeMem
  2451.     TST.W    Action
  2452.     BEQ    Return1
  2453.     CMP.W    #3,D1
  2454.     BLO    Return1
  2455.     CMP.W    #50,D1
  2456.     BHI    Return1
  2457.     SUBQ.W    #3,D1
  2458.     AND.L    #$FFFF,D1
  2459.     DIVU    #6,D1
  2460.     MOVE.W    D1,FileNameScrollPos+2
  2461.     LEA    FileNamesPtr(PC),A5
  2462.     MOVE.W    FileNameScrollPos(PC),D0
  2463.     ADD.W    D1,D0
  2464.     CMP.W    16(A5),D0
  2465.     BHS    Return1
  2466.     MULU    #36,D0
  2467.     ADD.L    (A5),D0
  2468.     MOVE.L    D0,A0
  2469.     TST.L    32(A0)
  2470.     BMI.S    AddDirectory
  2471.     MOVEQ    #DirNameLength-1,D0
  2472.     LEA    DirInputName,A1
  2473. fnploop    MOVE.B    (A0)+,(A1)+
  2474.     DBRA    D0,fnploop
  2475.     MOVE.W    Action,D6
  2476.     CMP.W    #1,D6
  2477.     BEQ    LoadSong
  2478.     CMP.W    #2,D6
  2479.     BEQ    DeleteSong
  2480.     CMP.W    #3,D6
  2481.     BEQ    xLoadModule
  2482.     CMP.W    #4,D6
  2483.     BEQ    DeleteModule
  2484.     CMP.W    #5,D6
  2485.     BEQ    LoadSample
  2486.     CMP.W    #6,D6
  2487.     BEQ    DeleteSample
  2488.     CMP.W    #10,D6
  2489.     BEQ    RenameFile
  2490.     RTS
  2491.  
  2492. xLoadModule    JMP    LoadModule
  2493.  
  2494. AddDirectory
  2495.     MOVE.L    A0,-(SP)
  2496.     MOVE.L    PathPtr,A0
  2497.     BSR    CopyPath
  2498.     MOVE.L    (SP)+,A0
  2499.     MOVEQ    #DirNameLength-1,D0
  2500. addplop    MOVE.B    (A0)+,(A1)+
  2501.     DBRA    D0,addplop
  2502.     LEA    FileName,A0
  2503.     MOVE.L    PathPtr,A1
  2504.     MOVEQ    #62,D0
  2505. addplp2    MOVE.B    (A0)+,(A1)+
  2506.     DBRA    D0,addplp2
  2507. addpdir    BSR    ShowDirPath
  2508.     MOVE.W    Action,D6
  2509.     CMP.W    #1,D6
  2510.     BEQ    LoadSongGadg
  2511.     CMP.W    #2,D6
  2512.     BEQ    DeleteSongGadg
  2513.     CMP.W    #3,D6
  2514.     BEQ    LoadModuleGadg
  2515.     CMP.W    #4,D6
  2516.     BEQ    DeleteModuleGadg
  2517.     CMP.W    #5,D6
  2518.     BEQ    LoadSampleGadg
  2519.     CMP.W    #6,D6
  2520.     BEQ    DeleteSampleGadg
  2521.     CMP.W    #10,D6
  2522.     BEQ    RenameFileGadg
  2523.     RTS
  2524.  
  2525. ParentDirGadg
  2526.     BSR    WaitForButtonUp
  2527.     MOVE.L    PathPtr,A0
  2528.     MOVE.L    A0,A1
  2529. pdgloop    TST.B    (A1)+
  2530.     BNE.S    pdgloop
  2531.     SUBQ.L    #1,A1
  2532.     CMP.L    A0,A1
  2533.     BLS    Return1
  2534.     SUBQ.L    #1,A1
  2535.     CMP.B    #'/',(A1)
  2536.     BNE.S    pdgskp1
  2537.     CLR.B    (A1)
  2538. pdgskp1    CMP.B    #':',(A1)
  2539.     BEQ.S    addpdir
  2540.     CMP.B    #'/',(A1)
  2541.     BEQ    pdgslsh
  2542.     CLR.B    (A1)
  2543.     CMP.L    A0,A1
  2544.     BLS.S    addpdir
  2545.     SUBQ.L    #1,A1
  2546.     BRA.S    pdgskp1
  2547.  
  2548. pdgslsh    CLR.B    (A1)
  2549.     BRA    addpdir
  2550.  
  2551. FileNamesPtr
  2552.     dc.l    0  ; A5+ 0
  2553.     dc.l    0  ;   + 4
  2554.     dc.l    0  ;   + 8
  2555.     dc.l    0  ;   +12
  2556.     dc.w    0  ;   +16
  2557.     dc.w    24 ;   +18
  2558. FileNameScrollPos
  2559.     dc.w    0
  2560.     dc.w    0
  2561.  
  2562. ;---- Has Disk Changed ----
  2563.  
  2564. HasDiskChanged
  2565.     MOVE.L    DOSbase,A6
  2566.     MOVE.L    A4,D1
  2567.     MOVEQ    #-2,D2
  2568.     JSR    LVOLock(A6)
  2569.     MOVE.L    D0,FileLock
  2570.     BEQ.S    ExamineError
  2571.     MOVE.L    FileLock,D1
  2572.     MOVE.L    #FileInfoBlock,D2
  2573.     JSR    LVOExamine(A6)
  2574.     TST.L    D0
  2575.     BEQ.S    ExamineError
  2576.     LEA    FileInfoBlock,A0
  2577.     MOVE.L    ofib_DateStamp+ds_Days(A0),D0
  2578.     CMP.L    4(A5),D0
  2579.     BNE.S    DiskChanged
  2580.     MOVE.L    ofib_DateStamp+ds_Minute(A0),D0
  2581.     CMP.L    8(A5),D0
  2582.     BNE.S    DiskChanged
  2583.     MOVE.L    ofib_DateStamp+ds_Tick(A0),D0
  2584.     CMP.L    12(A5),D0
  2585.     BNE.S    DiskChanged
  2586.     MOVE.L    FileLock,D1
  2587.     JSR    LVOUnLock(A6)
  2588.     MOVEQ    #0,D0
  2589.     RTS    
  2590.  
  2591. DiskChanged
  2592.     MOVE.L    ofib_DateStamp+ds_Days(A0),4(A5)
  2593.     MOVE.L    ofib_DateStamp+ds_Minute(A0),8(A5)
  2594.     MOVE.L    ofib_DateStamp+ds_Tick(A0),12(A5)
  2595.     MOVE.L    FileLock,D1
  2596.     JSR    LVOUnLock(A6)
  2597.     MOVEQ    #-1,D0
  2598.     RTS
  2599.  
  2600. ExamineError
  2601.     CLR.L    4(A5)
  2602.     MOVEQ    #-1,D0
  2603.     RTS
  2604.  
  2605. ShowFreeDiskGadg
  2606.     BSR    WaitForButtonUp
  2607.     BSR.S    LockAndGetInfo
  2608.     BSR    DirDiskUnlock
  2609.     JMP    ShowAllRight
  2610.  
  2611. LockAndGetInfo
  2612.     BSR    StorePtrCol
  2613.     BSR    SetDiskPtrCol
  2614.     CLR.W    FileNameScrollPos
  2615.     MOVE.L    DOSbase,A6
  2616.     MOVE.L    A4,D1    ; Dir-path in A4
  2617.     MOVEQ    #-2,D2
  2618.     JSR    LVOLock(A6)
  2619.     MOVE.L    D0,FileLock
  2620.     BEQ    DirDiskError
  2621.     LEA    ReadingDirText,A0
  2622.     JSR    ShowStatusText
  2623.     MOVE.L    FileLock,D1
  2624.     MOVE.L    #InfoData,D2
  2625.     JSR    LVOInfo(A6)
  2626.     LEA    InfoData,A0
  2627.     MOVE.L    12(A0),D0 ; id_NumBlocks
  2628.     SUB.L    16(A0),D0 ; id_NumBlocksUsed
  2629.     MULU    22(A0),D0 ; id_BytesPerBlock + 2
  2630.     MOVE.L    D0,FreeDiskSpace
  2631. ShowDiskSpace
  2632.     MOVE.W    #1510,TextOffset
  2633.     MOVE.L    FreeDiskSpace,D7
  2634.     TST.B    ShowDecFlag
  2635.     BNE.S    sdsdec
  2636.     SWAP    D7
  2637.     MOVE.W    D7,WordNumber
  2638.     JSR    PrintHexWord
  2639.     SWAP    D7
  2640.     MOVE.W    D7,WordNumber
  2641.     JSR    PrintHexWord
  2642.     MOVEQ    #0,D0
  2643.     RTS
  2644.  
  2645. sdsdec    DIVU    #10000,D7
  2646.     MOVE.W    D7,WordNumber
  2647.     JSR    Print4DecDigits
  2648.     SWAP    D7
  2649.     MOVE.W    D7,WordNumber
  2650.     JSR    Print4DecDigits
  2651.     MOVEQ    #0,D0
  2652.     RTS
  2653.  
  2654. ;---- Get Disk Directory ----
  2655.  
  2656. AllocDirMem
  2657.     ADD.W    #50,DirEntries
  2658.     MOVE.W    DirEntries,D0
  2659.     MULU    #36,D0
  2660.     MOVE.L    DirAllocSize(PC),D6
  2661.     MOVE.L    D0,DirAllocSize
  2662.     MOVE.L    #MEMF_PUBLIC!MEMF_CLEAR,D1
  2663.     MOVE.L    4.W,A6
  2664.     JSR    LVOAllocMem(A6)
  2665.     MOVE.L    D0,D7
  2666.     BEQ.S    baehsj
  2667.  
  2668.     MOVE.L    FileNamesPtr(PC),D1
  2669.     MOVE.L    D7,FileNamesPtr
  2670.     TST.L    D1
  2671.     BEQ    Return1
  2672.     TST.L    D6
  2673.     BEQ    Return1
  2674.     MOVE.L    D1,A0
  2675.     MOVE.L    D7,A1
  2676.     MOVE.L    D6,D0
  2677. admloop    MOVE.B    (A0)+,(A1)+
  2678.     SUBQ.L    #1,D6
  2679.     BNE.S    admloop
  2680.     MOVE.L    D1,A1
  2681.     MOVE.L    4.W,A6
  2682.     JSR    LVOFreeMem(A6)
  2683.     RTS
  2684.  
  2685. FreeDirMem
  2686.     MOVE.L    FileNamesPtr(PC),D1
  2687.     BEQ    Return1
  2688.     MOVE.L    D1,A1
  2689.     MOVE.L    DirAllocSize(PC),D0
  2690.     MOVE.L    4.W,A6
  2691.     JSR    LVOFreeMem(A6)
  2692.     CLR.L    FileNamesPtr
  2693.     CLR.W    DirAllocSize
  2694.     CLR.W    DirEntries
  2695.     RTS
  2696.  
  2697. baehsj    BSR    OutOfMemErr
  2698.     MOVEQ    #-1,D0
  2699.     RTS
  2700.  
  2701. DirAllocSize    dc.l    0
  2702. DirEntries    dc.w    0
  2703.  
  2704. DirDisk    BSR    FreeDirMem
  2705.     BSR    AllocDirMem
  2706.     BSR    LockAndGetInfo
  2707.     BNE    Return1
  2708.     MOVE.L    FileLock,D1
  2709.     MOVE.L    #FileInfoBlock,D2
  2710.     JSR    LVOExamine(A6)
  2711.     TST.L    D0
  2712.     BEQ    DirDiskError
  2713. ddloop1    MOVE.L    FileLock,D1
  2714.     MOVE.L    #FileInfoBlock,D2
  2715.     MOVE.L    DOSBase,A6
  2716.     JSR    LVOExNext(A6)
  2717.     TST.L    D0
  2718.     BEQ    DirDiskUnlock
  2719.     BTST    #2,$DFF016
  2720.     BEQ.S    AbortDir
  2721.     BSR    NewDirEntry
  2722.     BRA.S    ddloop1
  2723.  
  2724. AbortDir
  2725.     CLR.L    4(A5)
  2726.     LEA    DirAbortedText(PC),A0
  2727.     JSR    ShowStatusText
  2728.     BSR.S    DirDiskUnlock
  2729.     BSR    WaitALittle
  2730.     JSR    ShowAllRight
  2731.     MOVEQ    #0,D0
  2732.     RTS
  2733.  
  2734. DirDiskUnlock
  2735.     MOVE.L    FileLock,D1
  2736.     JSR    LVOUnLock(A6)
  2737.     BSR    RestorePtrCol
  2738.     MOVEQ    #0,D0
  2739.     RTS
  2740.  
  2741. DirAbortedText    dc.b 'dir aborted !',0
  2742.  
  2743. DirDiskError
  2744.     TST.L    FileLock
  2745.     BEQ.S    ddeskip
  2746.     MOVE.L    FileLock,D1
  2747.     JSR    LVOUnLock(A6)
  2748. ddeskip    BSR    RestorePtrCol
  2749.     LEA    CantFindDirText,A0
  2750.     JSR    ShowStatusText
  2751.     BSR    SetErrorPtrCol
  2752.     MOVEQ    #-1,D0
  2753.     RTS
  2754.  
  2755. ClearDirTotal
  2756.     CLR.W    16(A5)
  2757.     RTS    
  2758.  
  2759. CantFindDirText    dc.b "can't find dir !",0,0
  2760.  
  2761.  
  2762. NewDirEntry
  2763.     LEA    FIB_FileName,A0
  2764.     TST.B    ShowDirsFlag
  2765.     BNE.S    ndeok1
  2766.     TST.L    FIB_EntryType
  2767.     BPL    Return1
  2768. ndeok1    TST.L    FIB_EntryType
  2769.     BPL    ndeok2
  2770.     TST.B    ModOnlyFlag
  2771.     BEQ.S    ndeok2
  2772.     TST.W    DirPathNum
  2773.     BNE.S    ndeok2
  2774.     MOVE.L    (A0),D0
  2775.     AND.L    #$CFCFCFCF,D0
  2776.     CMP.L    #$4D4F440E,D0 ; MOD.
  2777.     BNE    Return1
  2778. ndeok2    MOVE.W    16(A5),D0
  2779.     CMP.W    DirEntries,D0
  2780.     BLO.S    ndeok3
  2781.     MOVE.L    A0,-(SP)
  2782.     BSR    AllocDirMem
  2783.     MOVE.L    (SP)+,A0
  2784. ndeok3    MOVE.W    16(A5),D6
  2785.     BEQ.S    ndeadd1        ; If first entry
  2786.     SUBQ.W    #1,D6
  2787.     MOVE.L    (A5),A1
  2788. ndeloopname
  2789.     MOVEQ    #0,D2
  2790.     MOVE.L    FIB_EntryType,D0
  2791.     MOVE.L    32(A1),D1
  2792.     TST.L    D0
  2793.     BPL.S    ndesfil    ; if directory, all is well
  2794.     TST.L    D1
  2795.     BMI.S    ndenext    ; was file, so skip if directory
  2796.     BRA.S    ndelopc
  2797. ndesfil    TST.L    D1    ; if file
  2798.     BPL.S    ndeinse
  2799. ndelopc    MOVE.B    (A0,D2.W),D0 ; Get a character
  2800.     BEQ.S    ndeinse
  2801.     CMP.B    #96,D0  ; Lowercase?
  2802.     BLO.S    ndeskp1
  2803.     SUB.B    #32,D0    ; Switch to upper
  2804. ndeskp1    MOVE.B    (A1,D2.W),D1
  2805.     BEQ.S    ndenext
  2806.     CMP.B    #96,D1
  2807.     BLO.S    ndeskp2
  2808.     SUB.B    #32,D1
  2809. ndeskp2    CMP.B    D0,D1
  2810.     BHI.S    ndeinse
  2811.     BNE.S    ndenext
  2812.     ADDQ.W    #1,D2
  2813.     BRA.S    ndelopc
  2814. ndenext    LEA    36(A1),A1    ; next entry
  2815.     DBRA    D6,ndeloopname    ; loop entries
  2816.     MOVE.L    (A5),A1
  2817.     MOVE.W    16(A5),D0
  2818.     MULU    #36,D0
  2819.     ADD.W    D0,A1
  2820.     BRA.S    ndeadd2
  2821.  
  2822. ndeinse    MOVE.L    (A5),A2
  2823.     MOVE.W    16(A5),D0
  2824.     MULU    #36,D0
  2825.     ADD.W    D0,A2
  2826.     MOVE.L    A2,A3
  2827.     LEA    36(A3),A3
  2828. nde3loop
  2829.     MOVE.W    -(A2),-(A3)
  2830.     CMP.L    A2,A1
  2831.     BNE.S    nde3loop
  2832.     BRA.S    ndeadd2
  2833.  
  2834. ndeadd1    MOVE.L    (A5),A1            ; Put new filename into list
  2835. ndeadd2    LEA    FIB_FileName,A0
  2836.     MOVE.L    A1,A3
  2837.     MOVEQ    #35,D0             ; Clear old filename
  2838. nde4loop
  2839.     CLR.B    (A3)+
  2840.     DBRA    D0,nde4loop
  2841.     MOVE.W    FIB_DateStamp+ds_Days+2,30(A1)
  2842.     MOVEQ    #-1,D0
  2843.     TST.L    FIB_EntryType
  2844.     BPL    ndefskp
  2845.     MOVE.L    FIB_FileSize,D0
  2846. ndefskp    MOVE.L    D0,32(A1)
  2847.     MOVEQ    #29,D0             ; Copy new filename
  2848. nde4loop2
  2849.     MOVE.B    (A0)+,D1
  2850.     MOVE.B    D1,(A1)+
  2851.     TST.B    D1
  2852.     BEQ.S    nde4skip
  2853.     DBRA    D0,nde4loop2
  2854. nde4skip
  2855.     ADDQ.W    #1,16(A5)    ; Files + 1
  2856.     RTS    
  2857.  
  2858. RedrawFileNames
  2859.     MOVE.W    D0,-(SP)
  2860.     BSR    ShowDirPath
  2861.     MOVE.W    (SP)+,D0
  2862.     MOVE.W    D0,FileNameScrollPos
  2863.     TST.W    16(A5)
  2864.     BEQ    Return1
  2865.     MOVE.L    #1881,A6
  2866.     MOVE.W    A6,TextOffset
  2867.     MOVE.L    (A5),D6
  2868.     MULU    #36,D0
  2869.     ADD.L    D0,D6
  2870.     MOVE.W    16(A5),D0
  2871.     SUB.W    FileNameScrollPos,D0
  2872.     CMP.W    #8,D0
  2873.     BHS.S    ShowFileNames
  2874.     SUBQ.W    #1,D0
  2875.     MOVE.W    D0,D7
  2876.     BRA.S    sfnloop
  2877.  
  2878. ShowFileNames
  2879.     MOVE.W    #$91,D0
  2880.     BSR    WaitForVBlank
  2881.     MOVEQ    #7,D7
  2882. sfnloop    MOVE.W    A6,TextOffset
  2883.     MOVE.L    D6,A0
  2884.     MOVEQ    #0,D0
  2885.     MOVE.W    30(A0),D0
  2886.     BSR    CalculateDate
  2887.     MOVE.W    TheDay(PC),WordNumber    
  2888.     JSR    Print2DecDigits
  2889.     MOVE.W    TheMonth(PC),WordNumber    
  2890.     JSR    Print2DecDigits
  2891.     MOVE.W    TheYear(PC),WordNumber    
  2892.     JSR    Print2DecDigits
  2893.     ADDQ.W    #1,TextOffset
  2894.     MOVE.L    D6,ShowTextPtr
  2895.     MOVE.W    #24,TextLength
  2896.     TST.W    DirPathNum
  2897.     BNE.S    sfnskip
  2898.     TST.B    ModOnlyFlag
  2899.     BEQ.S    sfnskip
  2900.     MOVE.L    D6,A0
  2901.     CMP.L    #"mod.",(A0)
  2902.     BNE.S    sfnskip
  2903.     ADDQ.L    #4,ShowTextPtr
  2904. sfnskip    JSR    SpaceShowText
  2905.     LEA    32(A6),A6
  2906.     MOVE.W    A6,TextOffset
  2907.     MOVE.L    D6,A0
  2908.     MOVE.L    32(A0),D1
  2909.     BMI.S    sfndir
  2910.     TST.B    ShowDecFlag
  2911.     BNE.S    sfndec
  2912.     SWAP    D1
  2913.     AND.W    #$000F,D1
  2914.     BSR    ShowOneDigit
  2915.     MOVE.L    D6,A0
  2916.     MOVE.W    34(A0),WordNumber
  2917.     JSR    PrintHexWord
  2918. sfnend    ADD.L    #36,D6
  2919.     LEA    208(A6),A6
  2920.     DBRA    D7,sfnloop
  2921.     RTS
  2922.  
  2923. sfndec    MOVE.L    D1,D0
  2924.     SUBQ.W    #1,TextOffset
  2925.     JSR    Print6DecDigits
  2926.     BRA.S    sfnend
  2927.  
  2928. sfndir    MOVE.L    #DirText,ShowTextPtr
  2929.     SUBQ.W    #1,TextOffset
  2930.     MOVE.W    #6,TextLength
  2931.     JSR    ShowText
  2932.     BRA.S    sfnend
  2933.  
  2934. ClrFileText    dc.b "    "
  2935.  
  2936. CalculateDate
  2937.     DIVU    #1461,D0
  2938.     LSL.W    #2,D0
  2939.     MOVE.W    D0,TheYear
  2940.     CLR.W    D0
  2941.     SWAP    D0
  2942.     CMP.W    #789,D0
  2943.     BEQ.S    cadleap
  2944.     BLO.S    cadskp2
  2945.     SUBQ.W    #1,D0
  2946. cadskp2    DIVU    #365,D0
  2947.     MOVE.L    D0,D1
  2948.     SWAP    D1
  2949.     CMP.W    #4,D0
  2950.     BLO.S    cadskip
  2951.     SUBQ.W    #1,D0
  2952. cadskip    ADD.W    D0,TheYear
  2953.     LEA    MonthTable(PC),A1
  2954.     MOVEQ    #24,D0
  2955. cadloop    SUBQ.W    #2,D0
  2956.     MOVE.W    (A1,D0.W),D2
  2957.     CMP.W    D2,D1
  2958.     BHS.S    cadskp3
  2959.     TST.W    D0
  2960.     BNE.S    cadloop
  2961. cadskp3    LSR.W    #1,D0
  2962.     ADDQ.W    #1,D0
  2963.     MOVE.W    D0,TheMonth
  2964.     SUB.W    D2,D1
  2965.     ADDQ.W    #1,D1
  2966.     MOVE.W    D1,TheDay
  2967. cadend    MOVEQ    #0,D0
  2968.     MOVE.W    TheYear(PC),D0
  2969.     ADD.W    #78,D0
  2970.     DIVU    #100,D0
  2971.     SWAP    D0
  2972.     MOVE.W    D0,TheYear
  2973.     RTS
  2974. cadleap    ADD.W    #2,TheYear
  2975.     MOVE.W    #2,TheMonth
  2976.     MOVE.W    #29,TheDay
  2977.     BRA    cadend
  2978.  
  2979. TheYear        dc.w 0
  2980. TheMonth    dc.w 0
  2981. TheDay        dc.w 0
  2982. MonthTable    dc.w 0,31,59,90,120,151,181,212,243,273,304,334
  2983. DirText        dc.b " (DIR)"
  2984.  
  2985. ;---- Play Song ----
  2986.  
  2987. PlaySong
  2988.     MOVEQ    #0,D0
  2989. SongFrom
  2990.     BSR    StopIt
  2991.     BTST    #2,$DFF016
  2992.     BNE.S    sofr1
  2993.     MOVE.W    PlayFromPos,D0
  2994. sofr1    MOVE.W    D0,ScrPattPos
  2995.     LSL.W    #4,D0
  2996.     AND.L    #$FFFF,D0
  2997.     MOVE.L    D0,PatternPosition
  2998. wfbu1    BTST    #6,$BFE001
  2999.     BEQ.S    wfbu1
  3000.     CLR.B    RawKeyCode
  3001.     CLR.B    SaveKey
  3002.     BSR    SetPlayPtrCol
  3003.     CLR.W    PatternTicks
  3004.     CLR.L    TimerTicks
  3005.     MOVE.L    #'patp',RunMode
  3006.     CLR.W    DidQuantize
  3007.     MOVE.L    #-1,LongFFFF
  3008.     BSR    SetScrPatternPos
  3009. SetPlayPosition
  3010.     MOVE.L    CurrPos,D0
  3011.     MOVE.L    SongDataPtr,A0
  3012.     CMP.B    sd_numofpatt(A0),D0
  3013.     BHS.S    SongPosToZero
  3014.     MOVE.L    CurrPos,SongPosition
  3015.     RTS
  3016.  
  3017. SongPosToZero
  3018.     CLR.L    SongPosition
  3019.     CLR.L    CurrPos
  3020.     RTS
  3021.  
  3022. ;---- Play Pattern ----
  3023.  
  3024. PlayPattern
  3025.     MOVEQ    #0,D0
  3026. PattFrom
  3027.     BSR    StopIt
  3028.     BTST    #2,$DFF016
  3029.     BNE.S    pafr1
  3030.     MOVE.W    PlayFromPos,D0
  3031. pafr1    MOVE.W    D0,ScrPattPos
  3032.     LSL.W    #4,D0
  3033.     AND.L    #$FFF,D0
  3034.     MOVE.L    D0,PatternPosition
  3035. wfbu2    BTST    #6,$BFE001
  3036.     BEQ.S    wfbu2
  3037.     CLR.B    RawKeyCode
  3038.     CLR.B    SaveKey
  3039.     MOVE.L    #'patt',RunMode
  3040.     BSR    SetPlayPtrCol
  3041. ResetPosition
  3042.     MOVE.L    PatternNumber,SongPosition
  3043.     RTS    
  3044.  
  3045. ;---- Record Pattern/Song ----
  3046.  
  3047. RecordPattern
  3048.     MOVEQ    #0,D0
  3049. RecordFrom
  3050.     TST.W    SamScrEnable
  3051.     BNE    Return1
  3052.     BSR    StopIt
  3053.     BTST    #2,$DFF016
  3054.     BNE.S    refr1
  3055.     MOVE.W    PlayFromPos,D0
  3056. refr1    MOVE.W    D0,ScrPattPos
  3057.     LSL.W    #4,D0
  3058.     AND.L    #$FFF,D0
  3059.     MOVE.L    D0,PatternPosition
  3060. wfbu3    BTST    #6,$BFE001
  3061.     BEQ.S    wfbu3
  3062.     BSR    SetEditPtrCol
  3063.     CLR.B    RawKeyCode
  3064.     CLR.B    SaveKey
  3065.     BSR    SaveUndo
  3066.     MOVE.L    #'edit',EditMode
  3067.     MOVE.L    #'patt',RunMode
  3068.     TST.B    RecordMode
  3069.     BEQ.S    ResetPosition
  3070.     MOVE.L    #'patp',RunMode
  3071.     BRA    SetPlayPosition
  3072.  
  3073. ;---- Show Main Screen ----
  3074.  
  3075. DisplayMainScreen
  3076.     CLR.W    BlockMarkFlag
  3077.     MOVE.W    #1,CurrScreen
  3078.     SF    NoSampleInfo
  3079.     TST.W    LoadInProgress
  3080.     BNE.S    dmsskp3
  3081.     BSR    SetNormalPtrCol
  3082.     TST.W    RunMode
  3083.     BEQ.S    dmsskip
  3084.     BSR    SetPlayPtrCol
  3085. dmsskip    TST.L    EditMode
  3086.     BEQ.S    dmsskp2
  3087.     BSR    SetEditPtrCol
  3088. dmsskp2    BSR    StorePtrCol
  3089. dmsskp3    ST    DisableAnalyzer
  3090.     BSR    ClearAnaHeights
  3091.     BSR    ClearRightArea
  3092.     LEA    TopMenusPos,A0
  3093.     LEA    TopMenusBuffer,A1
  3094.     MOVEQ    #43,D0
  3095. cgloop4    MOVEQ    #24,D1
  3096. cgloop5    MOVE.B    (A1)+,(A0)+
  3097.     MOVE.B    1099(A1),10239(A0)
  3098.     DBRA    D1,cgloop5
  3099.     LEA    15(A0),A0
  3100.     DBRA    D0,cgloop4
  3101.     BSR    RedrawToggles
  3102.     TST.B    EdEnable
  3103.     BNE    EditOp
  3104.     MOVEQ    #0,D4
  3105. RedrawAnaScope
  3106.     MOVE.W    #145,D0
  3107.     BSR    WaitForVBlank
  3108.     SF    ScopeEnable
  3109.     ST    DisableAnalyzer
  3110.     BSR    ClearRightArea
  3111.     LEA    SpectrumAnaData,A0
  3112.     MOVE.L    #SpectrumAnaSize,D0
  3113.     TST.B    AnaScopFlag
  3114.     BEQ.S    cgjojo
  3115.     LEA    ScopeData,A0
  3116.     MOVE.L    #ScopeSize,D0
  3117.  
  3118. cgjojo    BSR    Decompact
  3119.     BEQ    cgjaja
  3120.     LEA    SpectrumAnaPos,A0
  3121.     MOVEQ    #1,D7
  3122. cgloop1    MOVEQ    #54,D6    ; 55 lines in picture.
  3123. cgloop2    MOVEQ    #24,D5    ; 25 bytes(x8)
  3124. cgloop3    MOVE.B    (A1)+,(A0)+
  3125.     DBRA    D5,cgloop3
  3126.     ADDQ.L    #1,A1
  3127.     LEA    15(A0),A0
  3128.     DBRA    D6,cgloop2
  3129.     LEA    $1F68(A0),A0
  3130.     DBRA    D7,cgloop1
  3131.     BSR    FreeDecompMem
  3132. cgjaja    TST.L    D4
  3133.     BNE    Return1
  3134.     TST.B    AnaScopFlag
  3135.     BNE    cgscope
  3136.     BSR    ClearAnaHeights
  3137.     BSR    ClearRightArea
  3138.     SF    DisableAnalyzer
  3139.     BRA    SetAnalyzerColors
  3140. cgscope    ST    ScopeEnable
  3141.     BRA    ClearAnalyzerColors
  3142.     
  3143. ;---- Clear Areas ----
  3144.  
  3145. ClearFileNames    MOVE.W    #145,D0
  3146.     BSR    WaitForVBlank
  3147.     MOVE.L    TextBplPtr,A1
  3148.     LEA    1800(A1),A1
  3149.     MOVE.W    #549,D0
  3150.     MOVEQ    #0,D1
  3151. cfnloop    MOVE.L    D1,(A1)+
  3152.     DBRA    D0,cfnloop
  3153.     RTS
  3154.  
  3155. ClearRightArea
  3156.     MOVE.L    TextBplPtr,A0
  3157.     LEA    55(A0),A0
  3158.     MOVEQ    #0,D2
  3159.     MOVEQ    #98,D0
  3160. cnblloop1
  3161.     MOVEQ    #24,D1
  3162. cnblloop2
  3163.     MOVE.B    D2,(A0)+
  3164.     DBRA    D1,cnblloop2
  3165.     LEA    15(A0),A0
  3166.     DBRA    D0,cnblloop1
  3167.     RTS
  3168.  
  3169. Clear100Lines
  3170.     MOVE.L    TextBplPtr,A0
  3171.     MOVE.W    #999,D0
  3172.     MOVEQ    #0,D1
  3173. chlloop    MOVE.L    D1,(A0)+
  3174.     DBRA    D0,chlloop
  3175.     RTS
  3176.  
  3177. ;---- Are You Sure Requester ----
  3178.  
  3179. AreYouSure
  3180.     MOVE.B    DisableAnalyzer,SaveDA
  3181.     MOVE.B    ScopeEnable,SaveScope
  3182.     SF    ScopeEnable
  3183.     JSR    ShowStatusText
  3184.     BSR    StorePtrCol
  3185.     BSR    SetWaitPtrCol
  3186.     BSR    Wait_4000
  3187.     CMP    #1,CurrScreen
  3188.     BNE.S    aysskip
  3189.     TST.B    DisableAnalyzer
  3190.     BNE.S    aysskip
  3191.     ST     DisableAnalyzer
  3192.     BSR    ClearAnaHeights
  3193.     BSR    ClearRightArea
  3194. aysskip    LEA    SureBoxData,A1
  3195.     BSR    SwapBoxMem
  3196.     BSR    WaitForButtonUp
  3197.     BSR    Wait_4000
  3198.     CLR.B    RawKeyCode
  3199. surebuttoncheck
  3200.     BTST    #2,$DFF016
  3201.     BEQ.S    SureAnswerNo
  3202.     BSR    DoKeyBuffer
  3203.     MOVE.B    RawKeyCode,D0
  3204.     CMP.B    #21,D0 ; Pressed Y
  3205.     BEQ    SureAnswerYes
  3206.     CMP.B    #68,D0 ; Pressed Return
  3207.     BEQ.S    SureAnswerYes
  3208.     CMP.B    #54,D0 ; Pressed N
  3209.     BEQ.S    SureAnswerNo
  3210.     CMP.B    #69,D0 ; Pressed Esc
  3211.     BEQ.S    SureAnswerNo
  3212.     BTST    #6,$BFE001    ; Left Mousebutton
  3213.     BNE.S    surebuttoncheck
  3214.     MOVEM.W    MouseX,D0/D1
  3215.     CMP.W    #$AB,D0
  3216.     BLO.S    surebuttoncheck
  3217.     CMP.W    #$FC,D0
  3218.     BHI.S    surebuttoncheck
  3219.     CMP.W    #$48,D1
  3220.     BLO.S    surebuttoncheck
  3221.     CMP.W    #$52,D1
  3222.     BHI.S    surebuttoncheck
  3223.     CMP.W    #$C5,D0
  3224.     BLO.S    SureAnswerYes
  3225.     CMP.W    #$EA,D0
  3226.     BLO.S    surebuttoncheck
  3227. SureAnswerNo
  3228.     LEA    SureBoxData,A1
  3229.     BSR.S    SwapBoxMem
  3230.     JSR    ShowAllRight
  3231.     BSR    ClearAnaHeights
  3232.     MOVE.B    SaveDA,DisableAnalyzer
  3233.     MOVE.B    SaveScope,ScopeEnable
  3234.     BSR    ErrorRestoreCol
  3235.     BSR    WaitForButtonUp
  3236.     BSR    Wait_4000
  3237.     CLR.B    RawKeyCode
  3238.     MOVEQ    #-1,D0
  3239.     RTS
  3240.  
  3241. SureAnswerYes
  3242.     LEA    SureBoxData,A1
  3243.     BSR.S    SwapBoxMem
  3244.     JSR    ShowAllRight
  3245.     BSR    ClearAnaHeights
  3246.     MOVE.B    SaveDA,DisableAnalyzer
  3247.     MOVE.B    SaveScope,ScopeEnable
  3248.     BSR    RestorePtrCol
  3249.     BSR    WaitForButtonUp
  3250.     BSR    Wait_4000
  3251.     CLR.B    RawKeyCode
  3252.     MOVEQ    #0,D0
  3253.     RTS
  3254.  
  3255. SwapBoxMem
  3256.     LEA    SureBoxPos,A0
  3257.     MOVEQ    #38,D0
  3258. ssbmloop1
  3259.     MOVEQ    #12,D1
  3260. ssbmloop2
  3261.     MOVE.B    10240(A0),D2
  3262.     MOVE.B    546(A1),10240(A0)
  3263.     MOVE.B    D2,546(A1)
  3264.     MOVE.B    (A0),D2
  3265.     MOVE.B    (A1),(A0)+
  3266.     MOVE.B    D2,(A1)+
  3267.     DBRA    D1,ssbmloop2
  3268.     LEA    $001B(A0),A0
  3269.     ADDQ.L    #1,A1
  3270.     DBRA    D0,ssbmloop1
  3271.     MOVE.L    TextBplPtr,A0    ; Swap text...
  3272.     LEA    2100(A0),A0
  3273.     LEA    TextDataBuffer,A1
  3274.     MOVEQ    #38,D0
  3275. ssbmloop3
  3276.     MOVEQ    #12,D1
  3277. ssbmloop4
  3278.     MOVE.B    (A0),D2
  3279.     MOVE.B    (A1),(A0)+
  3280.     MOVE.B    D2,(A1)+
  3281.     DBRA    D1,ssbmloop4
  3282.     LEA    $001B(A0),A0
  3283.     ADDQ.L    #1,A1
  3284.     DBRA    D0,ssbmloop3
  3285.     RTS    
  3286.  
  3287. WaitForButtonUp
  3288.     BTST    #6,$BFE001    ; Check Left Mousebutton
  3289.     BEQ.S    WaitForButtonUp
  3290.     BTST    #2,$DFF016    ; Check Right Mousebutton
  3291.     BEQ.S    WaitForButtonUp
  3292.     MOVE.W    #$91,D0
  3293. WaitForVBlank
  3294.     MOVE.L    $DFF004,D1
  3295.     LSR.L    #8,D1
  3296.     AND.W    #$1FF,D1
  3297.     CMP.W    D1,D0
  3298.     BNE.S    WaitForVBlank
  3299.     RTS
  3300.  
  3301. ;---- Set Pointercolors ----
  3302.  
  3303. SetDeletePtrCol
  3304.     MOVE.L    A6,-(SP)
  3305.     MOVE.L    CopListColorPtr,A6
  3306.     MOVE.W    #$0AA,2(A6)
  3307.     MOVE.W    #$077,6(A6)
  3308.     MOVE.W    #$044,10(A6)
  3309.     MOVE.L    (SP)+,A6
  3310.     RTS    
  3311.  
  3312. SetNormalPtrCol
  3313.     MOVE.L    A6,-(SP)
  3314.     MOVE.L    CopListColorPtr,A6
  3315.     MOVE.W    #$AAA,2(A6)
  3316.     MOVE.W    #$777,6(A6)
  3317.     MOVE.W    #$444,10(A6)
  3318.     MOVE.L    (SP)+,A6
  3319.     RTS    
  3320.  
  3321. SetDiskPtrCol
  3322.     MOVE.L    A6,-(SP)
  3323.     MOVE.L    CopListColorPtr,A6
  3324.     MOVE.W    #$0A0,2(A6)
  3325.     MOVE.W    #$070,6(A6)
  3326.     MOVE.W    #$040,10(A6)
  3327.     MOVE.L    (SP)+,A6
  3328.     RTS    
  3329.  
  3330. SetPlayPtrCol
  3331.     MOVE.L    A6,-(SP)
  3332.     MOVE.L    CopListColorPtr,A6
  3333.     MOVE.W    #$AA0,2(A6)
  3334.     MOVE.W    #$770,6(A6)
  3335.     MOVE.W    #$440,10(A6)
  3336.     MOVE.L    (SP)+,A6
  3337.     RTS    
  3338.  
  3339. SetEditPtrCol
  3340.     MOVE.L    A6,-(SP)
  3341.     MOVE.L    CopListColorPtr,A6
  3342.     MOVE.W    #$05B,2(A6)
  3343.     MOVE.W    #$049,6(A6)
  3344.     MOVE.W    #$006,10(A6)
  3345.     MOVE.L    (SP)+,A6
  3346.     RTS    
  3347.  
  3348. SetWaitPtrCol
  3349.     MOVE.L    A6,-(SP)
  3350.     MOVE.L    CopListColorPtr,A6
  3351.     MOVE.W    #$A5A,2(A6)
  3352.     MOVE.W    #$727,6(A6)
  3353.     MOVE.W    #$404,10(A6)
  3354.     MOVE.L    (SP)+,A6
  3355.     RTS    
  3356.  
  3357. SetErrorPtrCol
  3358.     MOVE.L    A6,-(SP)
  3359.     MOVE.L    CopListColorPtr,A6
  3360.     MOVE.W    #$C00,2(A6)
  3361.     MOVE.W    #$900,6(A6)
  3362.     MOVE.W    #$700,10(A6)
  3363.     MOVE.L    (SP)+,A6
  3364.     MOVE.W    #1,UpdateFreeMem
  3365.     BSR    WaitALittle
  3366.     JSR    ShowAllRight
  3367.     BSR    SetNormalPtrCol
  3368.     MOVEQ    #0,D0
  3369.     RTS
  3370.  
  3371. WaitALittle
  3372.     MOVE.W    WaitTime(PC),D1
  3373. errorwaitloop
  3374.     BSR    Wait_4000
  3375.     DBRA    D1,errorwaitloop
  3376.     MOVE.W    #23,WaitTime
  3377.     RTS
  3378.  
  3379. WaitTime dc.w 23
  3380.  
  3381. StorePtrCol
  3382.     MOVE.L    A6,-(SP)
  3383.     MOVE.L    CopListColorPtr,A6
  3384.     MOVE.W    2(A6),PointerCol1Save
  3385.     MOVE.W    6(A6),PointerCol2Save
  3386.     MOVE.W    10(A6),PointerCol3Save
  3387.     MOVE.L    (SP)+,A6
  3388.     RTS
  3389.  
  3390. ErrorRestoreCol
  3391.     BSR    SetErrorPtrCol
  3392. RestorePtrCol
  3393.     MOVE.L    A6,-(SP)
  3394.     MOVE.W    #1,UpdateFreeMem
  3395.     MOVE.L    CopListColorPtr,A6
  3396.     MOVE.W    PointerCol1Save,2(A6)
  3397.     MOVE.W    PointerCol2Save,6(A6)
  3398.     MOVE.W    PointerCol3Save,10(A6)
  3399.     MOVE.L    (SP)+,A6
  3400.     RTS
  3401.  
  3402.  
  3403. ;---- Check special keys ----
  3404.  
  3405. CheckPlayKeys
  3406.     MOVE.B    RawKeyCode,D0
  3407.     CMP.B    #101,D0
  3408.     BEQ    PlaySong
  3409.     CMP.B    #103,D0
  3410.     BEQ    PlayPattern
  3411.     CMP.B    #64,D0
  3412.     BNE.S    cpkskip
  3413.     TST.L    RunMode    
  3414.     BNE    StopIt
  3415.     TST.L    EditMode
  3416.     BNE    StopIt    
  3417.     BRA    Edit
  3418. cpkskip    CMP.B    #97,D0
  3419.     BEQ    RecordPattern
  3420.     CMP.B    #69,D0
  3421.     BEQ    EscPressed
  3422.     CMP.B    #66,D0
  3423.     BEQ    TabulateCursor
  3424.     CMP.B    #127,D0
  3425.     BEQ    GotoCLI
  3426.     CMP.B    #48,D0
  3427.     BEQ    TurnOffVoices
  3428.     CMP.B    #60,D0
  3429.     BEQ    KillSample
  3430.     CMP.B    #13,D0
  3431.     BEQ    togglepnote
  3432.  
  3433.     CMP.B    #67,D0
  3434.     BEQ.S    HigherInstr
  3435.     CMP.B    #67+128,D0
  3436.     BEQ.S    LowerInstr
  3437.     MOVE.W    HiLowInstr,D1
  3438.     LEA    kpinstable(PC),A0
  3439.     MOVEQ    #0,D2
  3440. kpinsloop
  3441.     CMP.B    (A0,D2.W),D0
  3442.     BEQ.S    kpinsfound
  3443.     ADDQ.W    #1,D2
  3444.     CMP.W    #16,D2
  3445.     BLO.S    kpinsloop
  3446.     RTS
  3447.  
  3448. kpinsfound
  3449.     ADD.W    D2,D1
  3450.     BEQ.S    insnull
  3451.     BRA.S    redrsa2
  3452.  
  3453. LowerInstr
  3454.     CLR.W    HiLowInstr
  3455.     RTS
  3456. HigherInstr
  3457.     MOVE.W    #16,HiLowInstr
  3458.     MOVE.W    #16,D1
  3459.     BRA.S    redrsa2
  3460.  
  3461. redrsa3    MOVE.W    D1,InsNum
  3462. redrsam    CLR.B    RawKeyCode
  3463.     CLR.L    SavSamInf
  3464.     JSR    ShowSampleInfo
  3465.     JMP    RedrawSample
  3466.  
  3467. insnull    TST.W    InsNum
  3468.     BEQ.S    insnul2
  3469.     MOVE.W    InsNum,LastInsNum
  3470.     CLR.W    InsNum
  3471.     MOVEQ    #0,D1
  3472.     BRA.S    redrsa2
  3473.  
  3474. insnul2    JMP    ShowSampleInfo
  3475.  
  3476. kpinstable
  3477.     dc.b 15,90,91,92
  3478.     dc.b 93,61,62,63,74
  3479.     dc.b 45,46,47,94,29,30
  3480.     dc.b 31
  3481.  
  3482. redrsa2    TST.B    pnoteflag
  3483.     BEQ.S    redrsa3
  3484.     CLR.B    RawKeyCode
  3485.     TST.W    AltKeyStatus
  3486.     BNE.S    setpnote
  3487.     MOVE.W    D1,InsNum
  3488.     JSR    ShowSampleInfo
  3489.     MOVE.W    InsNum,D0
  3490.     ADD.W    D0,D0
  3491.     MOVE.W    pnotetable(PC,D0.W),D0
  3492.     MOVEQ    #-1,D2
  3493.     BSR    playtheinstr
  3494.     JMP    RedrawSample
  3495.  
  3496. pnotetable
  3497.     dc.w 24,24,24,24,24,24,24,24,24,24
  3498.     dc.w 24,24,24,24,24,24,24,24,24,24
  3499.     dc.w 24,24,24,24,24,24,24,24,24,24
  3500.     dc.w 24,24
  3501.  
  3502. setpnote
  3503.     ADD.W    D1,D1
  3504.     LEA    pnotetable(PC,D1.W),A0
  3505.     MOVE.L    A0,SplitAddress
  3506.     MOVE.W    #4,SamNoteType
  3507.     LEA    selnotetext(PC),A0
  3508.     JMP    ShowStatusText
  3509.  
  3510. selnotetext    dc.b "select note",0
  3511.  
  3512. togglepnote
  3513.     CLR.B    RawKeyCode
  3514.     MOVEQ    #0,D0
  3515.     MOVE.B    pnoteflag,D0
  3516.     ADDQ.B    #1,D0
  3517.     CMP.B    #3,D0
  3518.     BLO.S    tpnskp
  3519.     MOVEQ    #0,D0
  3520. tpnskp    MOVE.B    D0,pnoteflag
  3521.     LEA    pnotechar(PC,D0.W),A0
  3522.     MOVEQ    #1,D0
  3523.     MOVE.W    #5159,D1
  3524.     JMP    ShowText3
  3525.  
  3526. pnotechar    dc.b 32,128,129
  3527. pnoteflag    dc.b 0
  3528.  
  3529. ;---- Check transpose keys ----
  3530.  
  3531. CheckTransKeys
  3532.     TST.W    LeftAmigaStatus
  3533.     BEQ    Return1
  3534.     MOVE.W    PattCurPos,D0
  3535.     BSR    GetPositionPtr
  3536.     MOVE.B    RawKeyCode,D1
  3537.     CLR.B    RawKeyCode
  3538.     MOVE.B    SampleAllFlag,-(SP)
  3539.     BSR.S    ctksub
  3540.     MOVE.B    (SP)+,SampleAllFlag
  3541.     RTS
  3542.  
  3543. ctksub    MOVEQ    #0,D0
  3544.     CLR.B    SampleAllFlag
  3545.     CMP.B    #1,D1
  3546.     BEQ    NoteUp
  3547.     CMP.B    #16,D1
  3548.     BEQ    NoteDown
  3549.     CMP.B    #32,D1
  3550.     BEQ    OctaveUp
  3551.     CMP.B    #49,D1
  3552.     BEQ    OctaveDown
  3553.  
  3554.     MOVE.W    #300,D0
  3555.     CMP.B    #2,D1
  3556.     BEQ    NoteUp
  3557.     CMP.B    #17,D1
  3558.     BEQ    NoteDown
  3559.     CMP.B    #33,D1
  3560.     BEQ    OctaveUp
  3561.     CMP.B    #50,D1
  3562.     BEQ    OctaveDown
  3563.  
  3564.     MOVEQ    #0,D0
  3565.     MOVE.B    #1,SampleAllFlag
  3566.     CMP.B    #3,D1
  3567.     BEQ    NoteUp
  3568.     CMP.B    #18,D1
  3569.     BEQ    NoteDown
  3570.     CMP.B    #34,D1
  3571.     BEQ    OctaveUp
  3572.     CMP.B    #51,D1
  3573.     BEQ    OctaveDown
  3574.     
  3575.     MOVE.W    #300,D0
  3576.     CMP.B    #4,D1
  3577.     BEQ    NoteUp
  3578.     CMP.B    #19,D1
  3579.     BEQ    NoteDown
  3580.     CMP.B    #35,D1
  3581.     BEQ    OctaveUp
  3582.     CMP.B    #52,D1
  3583.     BEQ    OctaveDown
  3584.     RTS
  3585.  
  3586. ;---- Check control keys ----
  3587.  
  3588. CheckCtrlKeys
  3589.     TST.W    CtrlKeyStatus
  3590.     BEQ    Return1
  3591.     MOVEQ    #0,D0
  3592.     MOVE.B    RawKeyCode,D0
  3593.     CMP.B    #35,D0 ; F
  3594.     BEQ    ToggleFilter
  3595.     CMP.B    #33,D0 ; S
  3596.     BEQ    ToggleSplit
  3597.     CMP.B    #55,D0 ; M
  3598.     BEQ    ToggleMultiMode
  3599.     CMP.B    #16,D0 ; Q
  3600.     BEQ    UnmuteAll
  3601.     CMP.B    #32,D0 ; A
  3602.     BEQ    ToggleMute
  3603.     CMP.B    #49,D0 ; Z
  3604.     BEQ    RestoreEffects
  3605.     CMP.B    #19,D0 ; R
  3606.     BEQ    RestoreFKeyPos
  3607.     CMP.B    #20,D0 ; T
  3608.     BEQ    SwapTrack
  3609.  
  3610.     CMP.B    #53,D0 ; B
  3611.     BEQ    BeginBlock
  3612.     CMP.B    #51,D0 ; C
  3613.     BEQ    CopyBlock
  3614.     CMP.B    #50,D0 ; X
  3615.     BEQ    CutBlock
  3616.     CMP.B    #34,D0 ; D
  3617.     BEQ    DeleteBlock
  3618.     CMP.B    #25,D0 ; P
  3619.     BEQ    PasteBlock
  3620.     CMP.B    #23,D0 ; I
  3621.     BEQ    InsertBlock
  3622.     CMP.B    #38,D0 ; J
  3623.     BEQ    JoinPasteBlock
  3624.     CMP.B    #54,D0 ; N
  3625.     BEQ    Re_MarkBlock
  3626.     CMP.B    #21,D0 ; Y
  3627.     BEQ    BackwardsBlock
  3628.     CMP.B    #17,D0 ; W
  3629.     BEQ    PolyphonizeBlock
  3630.  
  3631.     CMP.B    #18,D0 ; E
  3632.     BEQ    ExpandTrack
  3633.     CMP.B    #24,D0 ; O
  3634.     BEQ    ContractTrack
  3635.     CMP.B    #37,D0 ; H
  3636.     BEQ    TransBlockUp
  3637.     CMP.B    #40,D0 ; L
  3638.     BEQ    TransBlockDown
  3639.     CMP.B    #39,D0 ; K
  3640.     BEQ    KillToEndOfTrack
  3641.     CMP.B    #22,D0 ; U
  3642.     BEQ    UndoLastChange
  3643.  
  3644.     CMP.B    #68,D0 ; CR
  3645.     BEQ    InsCmdTrack
  3646.     CMP.B    #65,D0 ; Del
  3647.     BEQ    DelCmdTrack
  3648.     CMP.B    #36,D0 ; G
  3649.     BEQ    BoostAll
  3650.     CMP.B    #52,D0 ; V
  3651.     BEQ    FilterAll
  3652.  
  3653.     CMP.B    #1,D0
  3654.     BLO    Return1
  3655.     CMP.B    #10,D0
  3656.     BHI    Return1
  3657.     BNE.S    cckskip
  3658.     MOVEQ    #0,D0
  3659. cckskip    MOVE.W    D0,EditMoveAdd
  3660.     CLR.B    RawKeyCode
  3661.     ADD.B    #'0',D0
  3662.     LEA    ematext(PC),A0
  3663.     MOVE.B    D0,11(A0)
  3664.     BSR    ShowStatusText
  3665.     MOVE.W    #10,WaitTime
  3666.     BSR    WaitALittle
  3667.     BRA    ShowAllRight
  3668.  
  3669. ematext    dc.b "editskip = 0",0,0
  3670.  
  3671. ;---- Check alt keys ----
  3672.  
  3673. CheckAltKeys
  3674.     TST.W    AltKeyStatus
  3675.     BEQ    Return1
  3676.     MOVEQ    #0,D0
  3677.     MOVE.B    RawKeyCode,D0
  3678.     CMP.B    #49,D0 ; Z
  3679.     BEQ    ToggleCh1
  3680.     CMP.B    #50,D0 ; X
  3681.     BEQ    ToggleCh2
  3682.     CMP.B    #51,D0 ; C
  3683.     BEQ    ToggleCh3
  3684.     CMP.B    #52,D0 ; V
  3685.     BEQ    ToggleCh4
  3686.     CMP.B    #53,D0 ; B
  3687.     BEQ    Boost
  3688.     CMP.B    #35,D0 ; F
  3689.     BEQ    Filter
  3690.     CMP.B    #20,D0 ; T
  3691.     BEQ.S    xTuningTone
  3692.     CMP.B    #33,D0 ; S
  3693.     BEQ.S    xSamplerScreen
  3694.     CMP.B    #19,D0 ; R
  3695.     BEQ.S    xResample
  3696.     CMP.B    #18,D0 ; E
  3697.     BEQ    DoEditOp
  3698.     CMP.B    #23,D0 ; I
  3699.     BEQ.S    AutoInsert
  3700.     CMP.B    #34,D0 ; D
  3701.     BEQ    DiskOp
  3702.     CMP.B    #39,D0 ; K
  3703.     BEQ    KillInstrTrack
  3704. ;    CMP.B    #17,D0 ; W
  3705. ;    BEQ.S    WaitForNote
  3706.     CMP.B    #32,D0 ; A
  3707.     BEQ.S    xSampler
  3708.     CMP.B    #16,D0 ; Q
  3709.     BEQ    ChkQuit
  3710.  
  3711. ;    CMP.B    #55,D0 ; M
  3712. ;    CMP.B    #25,D0 ; P
  3713. ;    CMP.B    #38,D0 ; J
  3714. ;    CMP.B    #54,D0 ; N
  3715. ;    CMP.B    #21,D0 ; Y
  3716. ;    CMP.B    #24,D0 ; O
  3717. ;    CMP.B    #37,D0 ; H
  3718. ;    CMP.B    #40,D0 ; L
  3719. ;    CMP.B    #22,D0 ; U
  3720. ;    CMP.B    #36,D0 ; G
  3721.     RTS
  3722.  
  3723. xTuningTone    JMP    TuningTone
  3724. xSamplerScreen    JMP    SamplerScreen
  3725. xResample    JMP    Resample
  3726. xSampler    JMP    Sampler
  3727.  
  3728. AutoInsert
  3729.     CLR.B    RawKeyCode
  3730.     EOR.B    #1,AutoInsFlag
  3731. ShowAutoInsert
  3732.     CMP.W    #4,CurrScreen
  3733.     BEQ    Return1
  3734.     MOVE.B    #' ',D0
  3735.     TST.B    AutoInsFlag
  3736.     BEQ.S    auins2
  3737.     MOVE.B    #'I',D0
  3738. auins2    MOVE.B    D0,AutoInsText
  3739.     MOVE.W    #4561,D1
  3740.     MOVEQ    #1,D0
  3741.     LEA    AutoInsText(PC),A0
  3742.     JMP    ShowText3
  3743.  
  3744. AutoInsText    dc.b 0
  3745. AutoInsFlag    dc.b 0
  3746.  
  3747. ;---- Jump between channels ----
  3748.  
  3749. TabulateCursor
  3750.     CLR.B    RawKeyCode
  3751.     TST.W    ShiftKeyStatus
  3752.     BNE.S    TabCurRight
  3753.     MOVE.W    PattCurPos,D0
  3754.     DIVU    #6,D0
  3755.     ADDQ.W    #1,D0
  3756.     CMP.W    #4,D0
  3757.     BNE.S    tacskip
  3758.     MOVEQ    #0,D0
  3759. tacskip    MULU    #6,D0
  3760.     MOVE.W    D0,PattCurPos
  3761.     BRA    UpdateCursorPos
  3762.  
  3763. TabCurRight
  3764.     MOVE.W    PattCurPos,D0
  3765.     ADDQ.W    #5,D0
  3766.     DIVU    #6,D0
  3767.     SUBQ.W    #1,D0
  3768.     BPL.S    tacskip
  3769.     MOVEQ    #3,D0
  3770.     BRA.S    tacskip
  3771.  
  3772. ;---- Escape was pressed ----
  3773.  
  3774. EscPressed
  3775.     CLR.B    RawKeyCode
  3776.     CLR.B    SaveKey
  3777.     MOVE.W    CurrScreen,D0
  3778.     CMP.W    #2,D0
  3779.     BLO.S    BotExit
  3780. TopExit    MOVE.W    CurrScreen,D0
  3781.     CMP.W    #2,D0
  3782.     BEQ    ExitHelpScreen
  3783.     CMP.W    #3,D0
  3784.     BEQ    ExitFromDir
  3785.     CMP.W    #4,D0
  3786.     BEQ.S    pedexit
  3787.     CMP.W    #5,D0
  3788.     BEQ    ExitSetup
  3789.     CMP.W    #6,D0
  3790.     BEQ.S    plstexit
  3791.     CMP.W    #7,D0
  3792.     BEQ    ExitSetup
  3793.     RTS
  3794.  
  3795. BotExit    TST.W    SamScrEnable
  3796.     BNE.S    samplerexit
  3797.     TST.W    BlockMarkFlag
  3798.     BNE    blkunma
  3799.     CMP.W    #1,CurrScreen
  3800.     BNE    Return1
  3801.     TST.B    EdEnable
  3802.     BNE    ExitEditOp
  3803.     RTS
  3804.  
  3805. samplerexit
  3806.      JMP    ExitFromSam
  3807. pedexit     JMP    PED_Exit
  3808. plstexit JMP    ExitPLST
  3809.  
  3810. GotoCLI    CLR.B    RawKeyCode
  3811.     CLR.B    SaveKey
  3812.     TST.L    RunMode
  3813.     BNE.S    cliskp1
  3814.     BSR    StopIt
  3815.     BSR    ResetMusicInt
  3816. cliskp1    BSR    ResetVBInt
  3817.     BSR    ResetInputHandler
  3818.     BSR    ResetAutoReq
  3819.     BSR    ResetCopList
  3820.     MOVE.L    ExtCmdAddress,D1
  3821.     BEQ.S    gcliskp
  3822.     CLR.L    ExtCmdAddress
  3823.     MOVE.L    ExtCmdWindow,D2
  3824.     MOVEQ    #0,D3
  3825.     MOVE.L    DOSBase,A6
  3826.     JSR    LVOExecute(A6)
  3827. gcliskp    SUB.L    A0,A0
  3828.     LEA    BackToProText(PC),A1
  3829.     LEA    OKGadgetText(PC),A2
  3830.     MOVE.L    A2,A3
  3831.     MOVEQ    #0,D0
  3832.     MOVEQ    #0,D1
  3833.     MOVE.W    #196,D2
  3834.     MOVEQ    #50,D3
  3835.     MOVE.L    IntuitionBase,A6
  3836.     JSR    LVOAutoRequest(A6)
  3837.     ADDQ.B    #1,LastRawkey
  3838.     TST.L    RunMode
  3839.     BNE.S    cliskp2
  3840.     BSR    SetMusicInt
  3841. cliskp2    BSR    SetVBInt
  3842.     BSR    SetInputHandler
  3843.     BSR    SetAutoReq
  3844.     BRA    SetCopList
  3845.  
  3846. BackToProText
  3847.     dc.b 0,1,1,0
  3848.     dc.w 14,6
  3849.     dc.l 0,btptext,0
  3850. btptext dc.b 'Back to Protracker',0,0
  3851.  
  3852. OKGadgetText
  3853.     dc.b 0,1,1,0
  3854.     dc.w 6,3
  3855.     dc.l 0,okgtext,0
  3856. okgtext dc.b 'OK',0,0
  3857.  
  3858. ;---- Check Help Key ----
  3859.  
  3860. HelpSelectText    dc.b    '* help selected *',0
  3861. PLSTSelectText    dc.b    '* plst selected *',0
  3862. PLSTHelpFlag    dc.b    0,0 ; free 0
  3863.  
  3864. CheckHelpKey
  3865.     CMP.B    #95,RawKeyCode    ; Help Key pressed ?
  3866.     BNE    Return1
  3867.     CLR.B    RawKeyCode
  3868.     TST.W    ShiftKeyStatus
  3869.     BEQ.S    realhlp
  3870.     LEA    HelpSelectText,A0
  3871.     EOR.B    #1,PLSTHelpFlag
  3872.     BEQ.S    chksel
  3873.     LEA    PLSTSelectText,A0
  3874. chksel    BSR    ShowStatusText
  3875.     BSR    WaitALittle
  3876.     BRA    ShowAllRight
  3877.  
  3878. gtoPLST    JMP    PLST
  3879.  
  3880. realhlp    TST.B    PLSTHelpFlag
  3881.     BNE.S    gtoPLST
  3882.     CMP.W    #2,CurrScreen
  3883.     BEQ    ExitHelpScreen
  3884.     BSR    TopExit
  3885.     MOVE.W    CurrScreen,SaveCurrScreen
  3886.     SF    ScopeEnable
  3887.     ST     DisableAnalyzer
  3888.     ST    NoSampleInfo
  3889.     BSR    ClearAnalyzerColors
  3890.     BSR    SwapHelpScreen
  3891.     BEQ    exithlp
  3892.     BSR    Clear100Lines
  3893.     TST.L    HelpTextIndex+4
  3894.     BNE.S    chkskip
  3895.     BSR    GetHelpIndex
  3896. chkskip    MOVE.L    #HelpFileName,D1
  3897.     MOVE.L    #1005,D2
  3898.     MOVE.L    DOSBase,A6
  3899.     JSR    LVOOpen(A6)
  3900.     MOVE.L    D0,FileHandle
  3901.     BNE    ShowHelpPage
  3902.     LEA    PTPath,A0
  3903.     BSR    CopyPath
  3904.     LEA    HelpFileName(PC),A0
  3905.     MOVEQ    #7,D0
  3906. hefilop    MOVE.B    (A0)+,(A1)+
  3907.     DBRA    D0,hefilop
  3908.     MOVE.L    #FileName,D1
  3909.     MOVE.L    #1005,D2
  3910.     MOVE.L    DOSBase,A6
  3911.     JSR    LVOOpen(A6)
  3912.     MOVE.L    D0,FileHandle
  3913.     BEQ    HelpFileError
  3914.     BRA.S    ShowHelpPage
  3915.  
  3916. ExitHelpScreen
  3917.     MOVE.L    FileHandle,D1
  3918.     BEQ.S    ehsskip
  3919.     MOVE.L    DOSBase,A6
  3920.     JSR    LVOClose(A6)
  3921. ehsskip    BSR    Clear100Lines
  3922.     BSR.S    SwapHelpScreen
  3923. exithlp    MOVE.W    SaveCurrScreen,CurrScreen
  3924.      BRA    DisplayMainAll
  3925.  
  3926. SwapHelpScreen
  3927.     MOVE.L    DecompMemPtr,D0
  3928.     BEQ.S    shelps2
  3929.     MOVE.L    D0,A1
  3930.     BSR    ssets3
  3931.     BRA    FreeDecompMem
  3932. shelps2    LEA    HelpScreenData,A0
  3933.     MOVE.L    #HelpScreenSize,D0
  3934.     BSR    Decompact
  3935.     BEQ    Return1
  3936.     BRA    ssets3
  3937.  
  3938. ShowHelpPage
  3939.     MOVE.W    #2,CurrScreen
  3940.     MOVE.W    HelpPage,D0
  3941.     AND.W    #$00FF,D0
  3942.     LSL.W    #2,D0
  3943.     LEA    HelpTextIndex,A0
  3944.     MOVE.L    FileHandle,D1
  3945.     BEQ    Return1
  3946.     MOVE.L    (A0,D0.W),D2
  3947.     ADD.L    #1024,D2
  3948.     MOVEQ    #-1,D3
  3949.     MOVE.L    DOSBase,A6
  3950.     JSR    LVOSeek(A6)
  3951.     MOVE.L    FileHandle,D1
  3952.     MOVE.L    #HelpTextData,D2
  3953.     MOVE.L    #656,D3
  3954.     JSR    LVORead(A6)
  3955.     BSR    Clear100Lines
  3956.     LEA    HelpTextData+16,A6
  3957.     MOVEQ    #120,D6
  3958.     MOVEQ    #15,D7
  3959. shploop    MOVEQ    #0,D0
  3960.     MOVE.L    A6,A1
  3961. shplop2    CMP.B    #10,(A1)+
  3962.     BEQ.S    ShowHelpLine
  3963.     TST.B    -1(A1)
  3964.     BEQ.S    ShowHelpLine
  3965.     ADDQ.W    #1,D0
  3966.     BRA.S    shplop2
  3967. ShowHelpLine
  3968.     MOVE.L    A6,ShowTextPtr
  3969.     MOVE.L    A1,A6
  3970.     MOVE.W    D6,TextOffset
  3971.     MOVE.W    D0,TextLength
  3972.     BEQ.S    shlskip
  3973.     JSR    ShowText
  3974. shlskip    ADD.W    #240,D6
  3975.     DBRA    D7,shploop
  3976.     BSR    Wait_4000
  3977.     BRA    Wait_4000
  3978.  
  3979. HelpPage    dc.w    1
  3980.  
  3981. HelpUp    LEA    HelpTextData+7,A0
  3982.     BRA.S    HelpMove
  3983. HelpDown
  3984.     LEA    HelpTextData+10,A0
  3985.     BRA.S    HelpMove
  3986. HelpLeft
  3987.     LEA    HelpTextData+4,A0
  3988.     BRA.S    HelpMove
  3989. HelpRight
  3990.     LEA    HelpTextData+13,A0
  3991. HelpMove
  3992.     CLR.B    RawKeyCode
  3993.     MOVEQ    #0,D0
  3994.     JSR    HexToInteger2
  3995.     TST.W    D0
  3996.     BEQ    Return1
  3997.     AND.W    #$00FF,D0
  3998.     MOVE.W    D0,HelpPage
  3999.     BRA    ShowHelpPage
  4000.  
  4001. GetHelpIndex
  4002.     MOVE.L    LaHeTx,D0
  4003.     CMP.L    HelpTextIndex,D0
  4004.     BEQ    Return1
  4005.     MOVE.L    #HelpFileName,D1
  4006.     MOVE.L    #1005,D2
  4007.     MOVE.L    DOSBase,A6
  4008.     JSR    LVOOpen(A6)
  4009.     MOVE.L    D0,FileHandle
  4010.     BNE.S    gehein
  4011.     LEA    PTPath,A0
  4012.     BSR    CopyPath
  4013.     LEA    HelpFileName(PC),A0
  4014.     MOVEQ    #7,D0
  4015. hefilp2    MOVE.B    (A0)+,(A1)+
  4016.     DBRA    D0,hefilp2
  4017.     MOVE.L    #FileName,D1
  4018.     MOVE.L    #1005,D2
  4019.     MOVE.L    DOSBase,A6
  4020.     JSR    LVOOpen(A6)
  4021.     MOVE.L    D0,FileHandle
  4022.     BEQ.S    HelpFileError
  4023. gehein    MOVE.L    D0,D1
  4024.     MOVE.L    #HelpTextIndex,D2
  4025.     MOVE.L    #256*4,D3
  4026.     JSR    LVORead(A6)
  4027.     MOVE.L    FileHandle,D1
  4028.     JSR    LVOClose(A6)
  4029.     MOVE.L    HelpTextIndex,LaHeTx
  4030.     RTS
  4031.  
  4032. HelpFileError
  4033.     MOVE.W    #2,CurrScreen
  4034.     LEA    NoHelpText(PC),A0
  4035.     MOVE.W    #1887,D1
  4036.     MOVEQ    #24,D0
  4037.     BRA    ShowText3
  4038.  
  4039. NoHelpText    dc.b 'Unable to open helpfile!'
  4040. HelpFileName    dc.b 'PT.help',0
  4041.  
  4042.  
  4043. ;---- Check Function Keys F6-F10 ----
  4044.  
  4045. CheckF6_F10
  4046.     CMP.B    #85,RawKeyCode
  4047.     BNE.S    CheckF7
  4048.     CLR.B    RawKeyCode
  4049.     TST.W    ShiftKeyStatus
  4050.     BEQ.S    cf6skip
  4051.     MOVE.W    ScrPattPos,F6pos
  4052. ShowPosSetText
  4053.     LEA    PosSetText,A0
  4054.     BSR    ShowStatusText
  4055.     MOVEQ    #8,D2
  4056. spsloop    BSR    Wait_4000
  4057.     DBRA    D2,spsloop
  4058.     BRA    ShowAllRight    
  4059. cf6skip    MOVE.W    F6pos,D0
  4060. chkalt    TST.W    AltKeyStatus
  4061.     BNE    PattFrom
  4062.     TST.W    CtrlKeyStatus
  4063.     BNE    RecordFrom
  4064.     TST.W    LeftAmigaStatus
  4065.     BNE    SongFrom
  4066.     TST.W    RunMode
  4067.     BNE    Return1
  4068.     MOVE.W    D0,ScrPattPos
  4069.     BRA    SetScrPatternPos
  4070.  
  4071. CheckF7    CMP.B    #86,RawKeyCode
  4072.     BNE.S    CheckF8
  4073.     CLR.B    RawKeyCode
  4074.     TST.W    ShiftKeyStatus
  4075.     BEQ.S    cf7skip
  4076.     MOVE.W    ScrPattPos,F7pos
  4077.     BRA.S    ShowPosSetText    
  4078. cf7skip    MOVE.W    F7pos,D0
  4079.     BRA.S    chkalt
  4080.  
  4081. CheckF8    CMP.B    #87,RawKeyCode
  4082.     BNE.S    CheckF9
  4083.     CLR.B    RawKeyCode
  4084.     TST.W    ShiftKeyStatus
  4085.     BEQ.S    cf8skip
  4086.     MOVE.W    ScrPattPos,F8pos
  4087.     BRA    ShowPosSetText    
  4088. cf8skip    MOVE.W    F8pos,D0
  4089.     BRA    chkalt
  4090.  
  4091. CheckF9    CMP.B    #88,RawKeyCode
  4092.     BNE.S    CheckF10
  4093.     CLR.B    RawKeyCode
  4094.     TST.W    ShiftKeyStatus
  4095.     BEQ.S    cf9skip
  4096.     MOVE.W    ScrPattPos,F9pos
  4097.     BRA    ShowPosSetText
  4098. cf9skip    MOVE.W    F9pos,D0
  4099.     BRA    chkalt
  4100.  
  4101. CheckF10
  4102.     CMP.B    #89,RawKeyCode
  4103.     BNE    Return1
  4104.     CLR.B    RawKeyCode
  4105.     TST.W    ShiftKeyStatus
  4106.     BEQ.S    cf10skip
  4107.     MOVE.W    ScrPattPos,F10pos
  4108.     BRA    ShowPosSetText    
  4109. cf10skip
  4110.     MOVE.W    F10pos,D0
  4111.     BRA    chkalt
  4112.  
  4113. F6pos    dc.w  0
  4114. F7pos    dc.w 16
  4115. F8pos    dc.w 32
  4116. F9pos    dc.w 48
  4117. F10pos    dc.w 63
  4118.  
  4119. ;---- Check Function Keys F3-F5 ----
  4120.  
  4121. CheckF3_F5
  4122.     MOVEQ    #0,D0
  4123.     MOVE.L    D0,A0
  4124.     TST.W    ShiftKeyStatus
  4125.     BNE    CCP4
  4126.     TST.W    CtrlKeyStatus
  4127.     BNE    CCP4
  4128.     TST.W    AltKeyStatus
  4129.     BNE    CutCopPas
  4130.     CMP.B    #68,RawKeyCode
  4131.     BEQ.S    StepPlayForward
  4132.     CMP.B    #65,RawKeyCode
  4133.     BEQ.S    StepPlayBackward
  4134.     TST.W    SamScrEnable
  4135.     BEQ    Return1
  4136.     CMP.B    #82,RawKeyCode
  4137.     BEQ.S    xSamCut
  4138.     CMP.B    #83,RawKeyCode
  4139.     BEQ.S    xSamCop
  4140.     CMP.B    #84,RawKeyCode
  4141.     BEQ.S    xSamPas
  4142.     RTS
  4143.  
  4144. xSamCut    JMP    SamCut
  4145. xSamCop    JMP    SamCopy
  4146. xSamPas    JMP    SamPaste
  4147.  
  4148. StepPlayForward
  4149.     MOVE.W    #1,StepPlayEnable
  4150.     BSR    DoStopIt
  4151.     MOVE.W    ScrPattPos,D0
  4152.     BRA    pafr1
  4153.  
  4154. StepPlayBackward
  4155.     MOVE.W    #1,StepPlayEnable
  4156.     BSR    DoStopIt
  4157.     MOVE.W    ScrPattPos,D0
  4158.     SUBQ.W    #1,D0
  4159.     AND.W    #63,D0
  4160.     BRA    pafr1
  4161.  
  4162. StepPlayEnable    dc.w    0
  4163.  
  4164. CCP4    MOVEQ    #0,D0
  4165.     MOVE.W    PattCurPos,D0
  4166.     DIVU    #6,D0
  4167.     AND.L    #3,D0
  4168.     LSL.L    #2,D0
  4169.     MOVE.L    D0,A0
  4170. CutCopPas
  4171.     ADD.L    SongDataPtr,A0
  4172.     LEA    sd_patterndata(A0),A0
  4173.     MOVE.L    PatternNumber,D0
  4174.     LSL.L    #8,D0
  4175.     LSL.L    #2,D0
  4176.     ADD.L    D0,A0
  4177.     TST.W    AltKeyStatus
  4178.     BNE.S    CutCopPasPatt
  4179.     TST.W    CtrlKeyStatus
  4180.     BNE.S    CutCopPasCmds
  4181. CutCopPasTrack    
  4182.     CMP.B    #82,RawKeyCode
  4183.     BEQ    CutTrack
  4184.     CMP.B    #83,RawKeyCode
  4185.     BEQ    CopyTrack
  4186.     CMP.B    #84,RawKeyCode
  4187.     BEQ    PasteTrack
  4188.     CMP.B    #68,RawKeyCode
  4189.     BEQ    InsNoteTrack
  4190.     CMP.B    #65,RawKeyCode
  4191.     BEQ    DelNoteTrack
  4192.     RTS
  4193.  
  4194. CutCopPasPatt
  4195.     CMP.B    #82,RawKeyCode
  4196.     BEQ.S    CutPattern
  4197.     CMP.B    #83,RawKeyCode
  4198.     BEQ.S    CopyPattern
  4199.     CMP.B    #84,RawKeyCode
  4200.     BEQ    PastePattern
  4201.     CMP.B    #68,RawKeyCode
  4202.     BEQ    InsNotePattern
  4203.     CMP.B    #65,RawKeyCode
  4204.     BEQ    DelNotePattern
  4205.     RTS
  4206.  
  4207. CutCopPasCmds    
  4208.     CMP.B    #82,RawKeyCode
  4209.     BEQ    CutCmds
  4210.     CMP.B    #83,RawKeyCode
  4211.     BEQ    CopyCmds
  4212.     CMP.B    #84,RawKeyCode
  4213.     BEQ    PasteCmds
  4214.     RTS
  4215.  
  4216. CutPattern
  4217.     BSR    SaveUndo
  4218.     LEA    PatternBuffer,A1
  4219.     MOVE.W    #255,D0
  4220.     MOVEQ    #0,D1
  4221. cupaloop
  4222.     MOVE.L    (A0),(A1)+
  4223.     MOVE.L    D1,(A0)+
  4224.     DBRA    D0,cupaloop
  4225.     CLR.B    RawKeyCode
  4226.     BRA    RedrawPattern
  4227.  
  4228. CopyPattern
  4229.     LEA    PatternBuffer,A1
  4230.     MOVE.W    #255,D0
  4231. copaloop
  4232.     MOVE.L    (A0)+,(A1)+
  4233.     DBRA    D0,copaloop
  4234.     CLR.B    RawKeyCode
  4235.     RTS    
  4236.  
  4237. PastePattern
  4238.     BSR    SaveUndo
  4239.     LEA    PatternBuffer,A1
  4240.     MOVE.W    #255,D0
  4241. papaloop
  4242.     MOVE.L    (A1)+,(A0)+
  4243.     DBRA    D0,papaloop
  4244.     CLR.B    RawKeyCode
  4245.     BRA    RedrawPattern
  4246.  
  4247.  
  4248. CutTrack
  4249.     BSR    SaveUndo
  4250.     LEA    TrackBuffer,A1
  4251.     MOVEQ    #63,D0
  4252.     MOVEQ    #0,D1
  4253. cutrloop
  4254.     MOVE.L    (A0),(A1)+
  4255.     MOVE.L    D1,(A0)
  4256.     LEA    16(A0),A0
  4257.     DBRA    D0,cutrloop
  4258.     CLR.B    RawKeyCode
  4259.     BRA    RedrawPattern
  4260.  
  4261. CopyTrack
  4262.     LEA    TrackBuffer,A1
  4263.     MOVEQ    #63,D0
  4264. cotrloop
  4265.     MOVE.L    (A0),(A1)+
  4266.     LEA    16(A0),A0
  4267.     DBRA    D0,cotrloop
  4268.     CLR.B    RawKeyCode
  4269.     RTS
  4270.  
  4271. PasteTrack
  4272.     BSR    SaveUndo
  4273.     LEA    TrackBuffer,A1
  4274.     MOVEQ    #63,D0
  4275. patrloop
  4276.     MOVE.L    (A1)+,(A0)
  4277.     LEA    16(A0),A0
  4278.     DBRA    D0,patrloop
  4279.     CLR.B    RawKeyCode
  4280.     BRA    RedrawPattern
  4281.  
  4282. InsNotePattern
  4283.     BSR    SaveUndo
  4284.     MOVEQ    #0,D0
  4285.     BSR    GetPositionPtr
  4286.     BSR.S    inotr
  4287.     MOVEQ    #6,D0
  4288.     BSR    GetPositionPtr
  4289.     BSR.S    inotr
  4290.     MOVEQ    #12,D0
  4291.     BSR    GetPositionPtr
  4292.     BSR.S    inotr
  4293.     MOVEQ    #18,D0
  4294.     BSR    GetPositionPtr
  4295.     BSR.S    inotr
  4296.     BRA.S    intskip
  4297. InsNoteTrack
  4298.     BSR    SaveUndo
  4299.     BSR.S    inotr
  4300. intskip    CLR.B    RawKeyCode
  4301.     ADD.W    D2,ScrPattPos
  4302.     AND.W    #$3F,ScrPattPos
  4303.     BSR    SetScrPatternPos
  4304.     BRA    RedrawPattern
  4305.  
  4306. inotr    MOVE.W    ScrPattPos,D1
  4307.     LSL.W    #4,D1
  4308.     CMP.W    #63*16,D1
  4309.     BEQ.S    inoskip
  4310.     MOVE.W    #992,D0
  4311. intloop    MOVE.L    (A0,D0.W),16(A0,D0.W)
  4312.     SUB.W    #16,D0
  4313.     CMP.W    D1,D0
  4314.     BGE.S    intloop
  4315. inoskip    MOVEQ    #1,D2
  4316.     CLR.L    (A0,D1.W)
  4317.     RTS
  4318.  
  4319. InsCmdTrack
  4320.     BSR    SaveUndo
  4321.     MOVE.W    PattCurPos,D0
  4322.     BSR    GetPositionPtr
  4323.     BSR.S    icmtr
  4324.     BRA.S    intskip
  4325. icmtr    MOVE.W    ScrPattPos,D1
  4326.     LSL.W    #4,D1
  4327.     CMP.W    #63*16,D1
  4328.     BEQ.S    icmskip
  4329.     MOVE.W    #992,D0
  4330. icmloop    MOVE.W    2(A0,D0.W),D2
  4331.     AND.W    #$0FFF,D2
  4332.     AND.W    #$F000,18(A0,D0.W)
  4333.     OR.W    D2,18(A0,D0.W)
  4334.     SUB.W    #16,D0
  4335.     CMP.W    D1,D0
  4336.     BGE.S    icmloop
  4337. icmskip    MOVEQ    #1,D2
  4338.     AND.W    #$F000,2(A0,D1.W)
  4339.     RTS
  4340.  
  4341. DelNotePattern
  4342.     BSR    SaveUndo
  4343.     MOVEQ    #0,D0
  4344.     BSR    GetPositionPtr
  4345.     BSR.S    dnt
  4346.     MOVEQ    #6,D0
  4347.     BSR    GetPositionPtr
  4348.     BSR.S    dnt
  4349.     MOVEQ    #12,D0
  4350.     BSR    GetPositionPtr
  4351.     BSR.S    dnt
  4352.     MOVEQ    #18,D0
  4353.     BSR    GetPositionPtr
  4354.     BSR.S    dnt
  4355.     BRA    intskip
  4356. DelNoteTrack
  4357.     BSR    SaveUndo
  4358.     BSR.S    dnt
  4359.     BRA    intskip
  4360.  
  4361. dnt    MOVE.W    ScrPattPos,D0
  4362.     BEQ    Return1
  4363.     SUBQ.W    #1,D0
  4364.     LSL.W    #4,D0
  4365. dntloop    MOVE.L    16(A0,D0.W),(A0,D0.W)
  4366.     ADD.W    #16,D0
  4367.     CMP.W    #1024,D0
  4368.     BLO.S    dntloop
  4369.     MOVE.W    #1008,D1
  4370.     MOVEQ    #-1,D2
  4371.     CLR.L    (A0,D1.W)
  4372.     RTS
  4373.  
  4374. DelCmdTrack
  4375.     BSR    SaveUndo
  4376.     MOVE.W    PattCurPos,D0
  4377.     BSR    GetPositionPtr
  4378.     BSR.S    dct
  4379.     BRA    intskip
  4380. dct    MOVE.W    ScrPattPos,D0
  4381.     BEQ    Return1
  4382.     SUBQ.W    #1,D0
  4383.     LSL.W    #4,D0
  4384. dctloop    MOVE.W    18(A0,D0.W),D2
  4385.     AND.W    #$0FFF,D2
  4386.     AND.W    #$F000,2(A0,D0.W)
  4387.     OR.W    D2,2(A0,D0.W)
  4388.     ADD.W    #16,D0
  4389.     CMP.W    #1024,D0
  4390.     BLO.S    dctloop
  4391.     MOVE.W    #1008,D1
  4392.     MOVEQ    #-1,D2
  4393.     AND.W    #$F000,2(A0,D1.W)
  4394.     RTS
  4395.  
  4396. CutCmds    BSR    SaveUndo
  4397.     LEA    CmdsBuffer,A1
  4398.     CLR.W    D0
  4399. cucmloop
  4400.     MOVE.L    0(A0,D0.W),(A1)+
  4401.     AND.L    #$FFFFF000,(A0,D0.W)
  4402.     ADD.W    #16,D0
  4403.     CMP.W    #1024,D0
  4404.     BNE.S    cucmloop
  4405.     CLR.B    RawKeyCode
  4406.     BRA    RedrawPattern
  4407.  
  4408. CopyCmds
  4409.     LEA    CmdsBuffer,A1
  4410.     CLR.W    D0
  4411. cocmloop
  4412.     MOVE.L    0(A0,D0.W),(A1)+
  4413.     ADD.W    #16,D0
  4414.     CMP.W    #1024,D0
  4415.     BNE.S    cocmloop
  4416.     CLR.B    RawKeyCode
  4417.     RTS    
  4418.  
  4419. PasteCmds
  4420.     BSR    SaveUndo
  4421.     LEA    CmdsBuffer,A1
  4422.     CLR.W    D0
  4423. pacmloop
  4424.     MOVE.L    0(A0,D0.W),D1
  4425.     AND.L    #$FFFFF000,D1
  4426.     MOVE.L    (A1)+,D2
  4427.     AND.L    #$00000FFF,D2
  4428.     OR.L    D2,D1
  4429.     MOVE.L    D1,(A0,D0.W)
  4430.     ADD.W    #16,D0
  4431.     CMP.W    #1024,D0
  4432.     BNE.S    pacmloop
  4433.     CLR.B    RawKeyCode
  4434.     BRA    RedrawPattern
  4435.  
  4436. ;---- Swap Tracks ----
  4437.  
  4438. SwapTrack
  4439.     BSR    StorePtrCol
  4440.     BSR    SetWaitPtrCol
  4441.     LEA    SwapTrackText,A0
  4442.     BSR    ShowStatusText
  4443. swtloop    BSR    GetHexKey
  4444.     TST.B    D1
  4445.     BEQ.S    swtabor
  4446.     CMP.B    #4,D1
  4447.     BHI.S    swtloop
  4448.     BSR    SaveUndo
  4449.     SUBQ.L    #1,D1
  4450.     LSL.L    #2,D1
  4451.     MOVE.L    D1,D0
  4452.     MOVE.L    SongDataPtr,A0
  4453.     LEA    sd_patterndata(A0),A0
  4454.     MOVE.L    PatternNumber,D1
  4455.     LSL.L    #8,D1
  4456.     LSL.L    #2,D1
  4457.     ADD.L    D1,A0
  4458.     MOVE.L    A0,A1
  4459.     ADD.L    D0,A0
  4460.     MOVE.W    PattCurPos,D0
  4461.     DIVU    #6,D0
  4462.     AND.L    #$F,D0
  4463.     LSL.L    #2,D0
  4464.     ADD.L    D0,A1
  4465.     MOVEQ    #63,D1
  4466. swtloop2
  4467.     MOVE.L    (A0),D0
  4468.     MOVE.L    (A1),(A0)
  4469.     MOVE.L    D0,(A1)
  4470.     LEA    16(A0),A0
  4471.     LEA    16(A1),A1
  4472.     DBRA    D1,swtloop2
  4473.     BSR    RedrawPattern
  4474. swtabor    BSR    ShowAllRight
  4475.     BRA    RestorePtrCol
  4476.  
  4477. SwapTrackText    dc.b 'Swap (1/2/3/4) ?',0,0
  4478.  
  4479. ;---- Block Commands ----
  4480.  
  4481. BlockMarkText    dc.b 'mark block 00-00',0,0
  4482. BlockErrorText    dc.b 'no block marked !',0
  4483. BufEmptyText    dc.b 'buffer is empty !',0
  4484. BlockFromPos    dc.w 0
  4485. BlockToPos    dc.w 0
  4486. BlockMarkFlag    dc.w 0
  4487. BlockBufferFlag    dc.w 0
  4488. JoinPasteFlag    dc.w 0
  4489. PolyPasteFlag    dc.w 0
  4490. BuffFromPos    dc.w 0
  4491. BuffToPos    dc.w 0
  4492.  
  4493. BeginBlock
  4494.     CLR.B    RawKeyCode
  4495.     TST.W    BlockMarkFlag
  4496.     BEQ.S    beblskp
  4497. blkunma    CLR.W    BlockMarkFlag
  4498.     BRA    ShowAllRight
  4499. beblskp    MOVE.W    #1,BlockMarkFlag
  4500.     MOVE.W    ScrPattPos,BlockFromPos
  4501.     MOVE.W    ScrPattPos,BlockToPos
  4502. ShowBlockPos
  4503.     MOVE.W    BlockFromPos,D0
  4504.     MOVE.W    BlockToPos,D1
  4505.     CMP.W    D0,D1
  4506.     BHS.S    sbpskip
  4507.     EXG    D0,D1
  4508. sbpskip    LEA    BlockMarkText+12(PC),A0
  4509.     BSR    IntTo2DecAscii
  4510.     LEA    BlockMarkText+15(PC),A0
  4511.     MOVE.W    D1,D0
  4512.     BSR    IntTo2DecAscii
  4513.     LEA    BlockMarkText(PC),A0
  4514.     BRA    ShowStatusText
  4515.  
  4516. Re_MarkBlock
  4517.     CLR.B    RawKeyCode
  4518.     MOVE.W    #1,BlockMarkFlag
  4519.     MOVE.W    BlockToPos,ScrPattPos
  4520.     BSR    SetScrPatternPos
  4521.     BRA.S    ShowBlockPos
  4522.  
  4523. CheckBlockPos
  4524.     TST.W    BlockMarkFlag
  4525.     BEQ    Return1
  4526.     MOVE.W    ScrPattPos,D0
  4527.     CMP.W    BlockToPos,D0
  4528.     BEQ    Return1
  4529.     MOVE.W    D0,BlockToPos
  4530.     BRA.S    ShowBlockPos
  4531.  
  4532. IntTo2DecAscii
  4533.     AND.L    #$FF,D0
  4534.     DIVU    #10,D0
  4535.     ADD.B    #'0',D0
  4536.     MOVE.B    D0,-1(A0)
  4537.     SWAP    D0
  4538.     ADD.B    #'0',D0
  4539.     MOVE.B    D0,(A0)
  4540.     RTS
  4541.  
  4542. CutBlock
  4543.     CLR.B    RawKeyCode
  4544.     TST.W    BlockMarkFlag
  4545.     BEQ    BlockError
  4546.     BSR.S    cobldo
  4547.     MOVE.W    #1,BlockMarkFlag
  4548.     BRA    ClearBlock
  4549.  
  4550. CopyBlock
  4551.     CLR.B    RawKeyCode
  4552.     TST.W    BlockMarkFlag
  4553.     BEQ    BlockError
  4554. cobldo    CLR.W    BlockMarkFlag
  4555.     MOVE.W    #1,BlockBufferFlag
  4556.     MOVE.W    PattCurPos,D0
  4557.     BSR    GetPositionPtr
  4558.     LEA    BlockBuffer,A1
  4559.     MOVEQ    #63,D0
  4560. cobllop    MOVE.L    (A0),(A1)
  4561.     LEA    16(A0),A0
  4562.     LEA    16(A1),A1
  4563.     DBRA    D0,cobllop
  4564.     MOVE.W    BlockFromPos,D0
  4565.     MOVE.W    BlockToPos,D1
  4566.     CMP.W    D0,D1
  4567.     BHS.S    coblskp
  4568.     EXG    D0,D1
  4569. coblskp    MOVE.W    D0,BuffFromPos
  4570.     MOVE.W    D1,BuffToPos
  4571.     BRA    ShowAllRight
  4572.  
  4573.  
  4574. PasteBlock
  4575.     CLR.B    RawKeyCode
  4576.     TST.W    BlockBufferFlag
  4577.     BEQ    BufferError
  4578.     BSR    SaveUndo
  4579.     MOVE.W    PattCurPos,D0
  4580.     BSR    GetPositionPtr
  4581.     LEA    BlockBuffer,A1
  4582.     MOVE.W    BuffFromPos,D0
  4583.     MOVE.W    BuffToPos,D1
  4584.     MOVE.W    ScrPattPos,D2
  4585.     LSL.W    #4,D0
  4586.     LSL.W    #4,D1
  4587.     LSL.W    #4,D2
  4588. pabllop    MOVE.L    (A1,D0.W),D3
  4589.     TST.W    JoinPasteFlag
  4590.     BEQ.S    pablskp
  4591.     MOVE.L    D3,D4
  4592.     AND.L    #$FFFFF000,D4
  4593.     BNE.S    pablskp
  4594.     MOVE.L    (A0,D2.W),D4
  4595.     AND.L    #$FFFFF000,D4
  4596.     AND.L    #$00000FFF,D3
  4597.     OR.L    D4,D3
  4598. pablskp    MOVE.L    D3,(A0,D2.W)
  4599.     CMP.W    D0,D1
  4600.     BEQ.S    pablend
  4601.     CMP.W    #63*16,D0
  4602.     BEQ.S    pablend
  4603.     CMP.W    #63*16,D2
  4604.     BEQ.S    pablend
  4605.     ADD.W    #16,D0
  4606.     ADD.W    #16,D2
  4607.     TST.W    PolyPasteFlag
  4608.     BEQ.S    pabllop
  4609.     MOVEM.L    A1/D0-D2,-(SP)
  4610.     BSR    GotoNextMulti
  4611.     MOVE.W    PattCurPos,D0
  4612.     BSR    GetPositionPtr
  4613.     MOVEM.L    (SP)+,A1/D0-D2
  4614.     BRA.S    pabllop
  4615. pablend    CLR.W    JoinPasteFlag
  4616.     CLR.W    PolyPasteFlag
  4617.     BSR    ShowAllRight
  4618.     BSR    RedrawPattern
  4619.     TST.W    ShiftKeyStatus
  4620.     BNE    Return1
  4621.     MOVE.W    BuffToPos,D0
  4622.     SUB.W    BuffFromPos,D0
  4623.     ADDQ.W    #1,D0
  4624.     ADD.W    ScrPattPos,D0
  4625.     CMP.W    #63,D0
  4626.     BLS.S    pablset
  4627.     MOVEQ    #0,D0
  4628. pablset    MOVE.W    D0,ScrPattPos
  4629.     BRA    SetScrPatternPos
  4630.  
  4631. PolyphonizeBlock
  4632.     MOVE.W    #1,PolyPasteFlag
  4633. JoinPasteBlock
  4634.     MOVE.W    #1,JoinPasteFlag
  4635.     BRA    PasteBlock
  4636.  
  4637. InsertBlock
  4638.     CLR.B    RawKeyCode
  4639.     TST.W    BlockBufferFlag
  4640.     BEQ    BufferError
  4641.     CMP.W    #63,ScrPattPos
  4642.     BEQ    PasteBlock
  4643.     MOVE.W    BuffToPos,D0
  4644.     SUB.W    BuffFromPos,D0
  4645. inbllop    MOVE.L    D0,-(SP)
  4646.     MOVE.W    PattCurPos,D0
  4647.     BSR    GetPositionPtr
  4648.     BSR    inotr
  4649.     MOVE.L    (SP)+,D0
  4650.     DBRA    D0,inbllop
  4651.     BRA    PasteBlock
  4652.  
  4653. DeleteBlock
  4654.     CLR.B    RawKeyCode
  4655.     TST.W    BlockMarkFlag
  4656.     BEQ    BlockError
  4657.     BSR    SaveUndo
  4658.     MOVE.W    BlockFromPos,D0
  4659.     MOVE.W    BlockToPos,D1
  4660.     CMP.W    D0,D1
  4661.     BHS.S    deblskp
  4662.     EXG    D0,D1
  4663. deblskp    CMP.W    #63,D1
  4664.     BEQ.S    ClearBlock
  4665.     CLR.W    BlockMarkFlag
  4666.     MOVE.W    D0,ScrPattPos
  4667.     ADDQ.W    #1,ScrPattPos
  4668.     SUB.W    D0,D1
  4669.     MOVE.W    D1,D0
  4670. debllop    MOVE.L    D0,-(SP)
  4671.     MOVE.W    PattCurPos,D0
  4672.     BSR    GetPositionPtr
  4673.     BSR    dnt
  4674.     MOVE.L    (SP)+,D0
  4675.     DBRA    D0,debllop
  4676.     SUBQ.W    #1,ScrPattPos
  4677.     BSR    ShowAllRight
  4678.     BRA    RedrawPattern
  4679.  
  4680. ClearBlock
  4681.     TST.W    BlockMarkFlag
  4682.     BEQ    BlockError
  4683.     BSR    SaveUndo
  4684.     CLR.W    BlockMarkFlag
  4685.     MOVE.W    PattCurPos,D0
  4686.     BSR    GetPositionPtr
  4687.     MOVE.W    BlockFromPos,D0
  4688.     MOVE.W    BlockToPos,D1
  4689.     CMP.W    D0,D1
  4690.     BHS.S    clblskp
  4691.     EXG    D0,D1
  4692. clblskp    LSL.W    #4,D0
  4693.     LSL.W    #4,D1
  4694.     MOVEQ    #0,D2
  4695. clbllop    MOVE.L    D2,(A0,D0.W)
  4696.     CMP.W    D0,D1
  4697.     BEQ.S    clblend
  4698.     ADD.W    #16,D0
  4699.     BRA.S    clbllop
  4700. clblend    BSR    ShowAllRight
  4701.     BRA    RedrawPattern
  4702.  
  4703. BackwardsBlock
  4704.     CLR.B    RawKeyCode
  4705.     TST.W    BlockMarkFlag
  4706.     BEQ    BlockError
  4707.     BSR    SaveUndo
  4708.     CLR.W    BlockMarkFlag
  4709.     MOVE.W    PattCurPos,D0
  4710.     BSR    GetPositionPtr
  4711.     MOVE.W    BlockFromPos,D0
  4712.     MOVE.W    BlockToPos,D1
  4713.     CMP.W    D0,D1
  4714.     BHS.S    bablskp
  4715.     EXG    D0,D1
  4716. bablskp    LSL.W    #4,D0
  4717.     LSL.W    #4,D1
  4718. babllop    MOVE.L    (A0,D0.W),D2
  4719.     MOVE.L    (A0,D1.W),(A0,D0.W)
  4720.     MOVE.L    D2,(A0,D1.W)
  4721.     CMP.W    D1,D0
  4722.     BHS.S    bablend
  4723.     ADD.W    #16,D0
  4724.     SUB.W    #16,D1
  4725.     CMP.W    D1,D0
  4726.     BHS.S    bablend
  4727.     BRA.S    babllop
  4728. bablend    BSR    ShowAllRight
  4729.     BRA    RedrawPattern
  4730.  
  4731. TransBlockUp
  4732.     SF    trblflag
  4733.     BRA.S    trbldo
  4734. TransBlockDown
  4735.     ST    trblflag
  4736. trbldo    CLR.B    RawKeyCode
  4737.     TST.W    BlockMarkFlag
  4738.     BEQ.S    BlockError
  4739.     BSR    SaveUndo
  4740.     MOVE.W    #2,NoteShift
  4741.     MOVE.W    BlockFromPos,D0
  4742.     MOVE.W    BlockToPos,D1
  4743.     CMP.W    D0,D1
  4744.     BHS.S    trblskp
  4745.     EXG    D0,D1
  4746. trblskp    MOVE.W    D0,D5
  4747.     LSL.W    #4,D5
  4748.     SUB.W    D0,D1
  4749.     MOVE.W    D1,D6
  4750.     MOVE.W    PattCurPos,D0
  4751.     BSR    GetPositionPtr
  4752.     LEA    (A0,D5.W),A3
  4753.     MOVEQ    #0,D3
  4754.     MOVE.B    SampleAllFlag,sampallsave
  4755.     ST    SampleAllFlag
  4756.     TST.B    trblflag
  4757.     BEQ.S    trblup
  4758.     BSR    sandlo2
  4759.     MOVE.B    sampallsave,SampleAllFlag
  4760.     BRA    RedrawPattern
  4761. trblup    BSR    sanulo2
  4762.     MOVE.B    sampallsave,SampleAllFlag
  4763.     BRA    RedrawPattern
  4764.  
  4765. trblflag    dc.b 0
  4766. sampallsave    dc.b 0
  4767.  
  4768. BlockError
  4769.     LEA    BlockErrorText,A0
  4770.     BSR    ShowStatusText
  4771.     BRA    SetErrorPtrCol
  4772.  
  4773. BufferError
  4774.     LEA    BufEmptyText,A0
  4775.     BSR    ShowStatusText
  4776.     BRA    SetErrorPtrCol
  4777.  
  4778. ExpandTrack
  4779.     CLR.B    RawKeyCode
  4780.     BSR    SaveUndo
  4781.     MOVE.W    ScrPattPos,PosSave
  4782.     ADDQ.W    #1,ScrPattPos
  4783.     CMP.W    #64,ScrPattPos
  4784.     BHS.S    extrend
  4785. extrlop    MOVE.W    PattCurPos,D0
  4786.     BSR    GetPositionPtr
  4787.     BSR    inotr
  4788.     ADDQ.W    #2,ScrPattPos
  4789.     CMP.W    #64,ScrPattPos
  4790.     BLO.S    extrlop
  4791. extrend    MOVE.W    PosSave,ScrPattPos
  4792.     BRA    RedrawPattern
  4793.  
  4794. ContractTrack
  4795.     CLR.B    RawKeyCode
  4796.     BSR    SaveUndo
  4797.     MOVE.W    ScrPattPos,PosSave
  4798.     ADDQ.W    #1,ScrPattPos
  4799.     CMP.W    #64,ScrPattPos
  4800.     BHS.S    cotrend
  4801. cotrlop    MOVE.W    PattCurPos,D0
  4802.     BSR    GetPositionPtr
  4803.     BSR    dnt
  4804.     ADDQ.W    #1,ScrPattPos
  4805.     CMP.W    #64,ScrPattPos
  4806.     BLO.S    cotrlop
  4807. cotrend    MOVE.W    PosSave,ScrPattPos
  4808.     BRA    RedrawPattern
  4809.  
  4810. PosSave    dc.w 0
  4811.  
  4812.  
  4813. KillToEndOfTrack
  4814.     CLR.B    RawKeyCode
  4815.     BSR    SaveUndo
  4816.     MOVE.W    PattCurPos,D0
  4817.     BSR    GetPositionPtr
  4818.     MOVE.W    ScrPattPos,D0
  4819.     MOVE.W    D0,D1
  4820.     MULU    #16,D1
  4821.     LEA    (A0,D1.W),A0
  4822.     TST.W    ShiftKeyStatus
  4823.     BNE.S    KillToStart
  4824. kteot    CLR.L    (A0)
  4825.     LEA    16(A0),A0
  4826.     ADDQ.W    #1,D0
  4827.     CMP.W    #64,D0
  4828.     BLO.S    kteot
  4829.     BRA    RedrawPattern
  4830.  
  4831. KillToStart
  4832.     CLR.L    (A0)
  4833.     LEA    -16(A0),A0
  4834.     TST.W    D0
  4835.     BEQ    RedrawPattern
  4836.     SUBQ.W    #1,D0
  4837.     BRA.S    KillToStart
  4838.  
  4839. UndoLastChange
  4840.     CLR.B    RawKeyCode
  4841.     MOVEQ    #0,D0
  4842.     BSR    GetPositionPtr
  4843.     LEA    UndoBuffer,A1
  4844.     MOVE.W    #255,D0
  4845. unlalop    MOVE.L    (A1),D1
  4846.     MOVE.L    (A0),(A1)+
  4847.     MOVE.L    D1,(A0)+
  4848.     DBRA    D0,unlalop
  4849.     BRA    RedrawPattern
  4850.  
  4851. SaveUndo
  4852.     MOVEM.L    D0/A0-A1,-(SP)
  4853.     MOVEQ    #0,D0
  4854.     BSR    GetPositionPtr
  4855.     LEA    UndoBuffer,A1
  4856.     MOVE.W    #255,D0
  4857. saunlop    MOVE.L    (A0)+,(A1)+
  4858.     DBRA    D0,saunlop
  4859.     MOVEM.L    (SP)+,D0/A0-A1
  4860.     RTS
  4861.  
  4862. BoostAll
  4863.     LEA    BoostAllText,A0
  4864.     BSR    AreYouSure
  4865.     BNE    SetErrorPtrCol
  4866.     MOVE.W    InsNum,SaveInstr
  4867.     MOVE.W    #1,InsNum
  4868. boallop    BSR    ShowSampleInfo
  4869.     BSR    Boost2
  4870.     ADDQ.W    #1,InsNum
  4871.     CMP.W    #32,InsNum
  4872.     BLO.S    boallop
  4873.     MOVE.W    SaveInstr,InsNum
  4874.     BRA    ShowSampleInfo
  4875.  
  4876. FilterAll
  4877.     LEA    FilterAllText,A0
  4878.     BSR    AreYouSure
  4879.     BNE    SetErrorPtrCol
  4880.     MOVE.W    InsNum,SaveInstr
  4881.     MOVE.W    #1,InsNum
  4882. fiallop    BSR    ShowSampleInfo
  4883.     BSR    Filter2
  4884.     ADDQ.W    #1,InsNum
  4885.     CMP.W    #32,InsNum
  4886.     BLO.S    fiallop
  4887.     MOVE.W    SaveInstr,InsNum
  4888.     BRA    ShowSampleInfo
  4889.  
  4890. BoostAllText    dc.b 'boost all samples',0
  4891. FilterAllText    dc.b 'filter all sampls',0
  4892. SaveInstr    dc.w 0
  4893.  
  4894. ;---- Check Function Keys F1-F2 ----
  4895.  
  4896. CheckF1_F2
  4897.     CMP.B    #80,RawKeyCode
  4898.     BEQ.S    SetOctaveLow
  4899.     CMP.B    #81,RawKeyCode
  4900.     BEQ.S    SetOctaveHigh
  4901.     RTS    
  4902.  
  4903. SetOctaveLow
  4904.     MOVE.L    #KbdTransTable1,KeyTransTabPtr
  4905.     CLR.B    RawKeyCode
  4906.     RTS    
  4907.  
  4908. SetOctaveHigh
  4909.     MOVE.L    #KbdTransTable2,KeyTransTabPtr
  4910.     CLR.B    RawKeyCode
  4911.     RTS    
  4912.  
  4913.  
  4914. ;---- Get Hex Key ----
  4915.  
  4916. GetHexByte
  4917.     BSR    StorePtrCol
  4918.     BSR    SetWaitPtrCol
  4919.     CLR.B    RawKeyCode
  4920.     MOVEQ    #0,D0
  4921.     MOVE.W    TextOffset,D0
  4922.     DIVU    #40,D0
  4923.     ADDQ.W    #6,D0
  4924.     MOVE.W    D0,LineCurY
  4925.     SWAP    D0
  4926.     LSL.W    #3,D0
  4927.     ADDQ.W    #4,D0
  4928.     MOVE.W    D0,LineCurX
  4929.     BSR    UpdateLineCurPos
  4930.     BSR.S    GetHexKey
  4931.     MOVE.L    D1,D0
  4932.     MOVE.B    D1,D6
  4933.     LSL.B    #4,D6
  4934.     BSR    PrintHexDigit
  4935.     ADD.W    #8,LineCurX
  4936.     BSR    UpdateLineCurPos
  4937.     BSR.S    GetHexKey
  4938.     MOVE.L    D1,D0
  4939.     OR.B    D1,D6
  4940.     BSR    PrintHexDigit
  4941.     CLR.W    LineCurX
  4942.     MOVE.W    #270,LineCurY
  4943.     BSR    UpdateLineCurPos
  4944.     BSR    RestorePtrCol
  4945.     MOVEQ    #0,D0
  4946.     MOVE.B    D6,D0
  4947.     RTS
  4948.  
  4949. GetHexKey
  4950.     CLR.B    MixChar
  4951.     MOVEQ    #0,D0
  4952.     MOVEQ    #0,D1
  4953.     BTST    #2,$DFF016
  4954.     BEQ.S    ghkreturn
  4955.     BSR    DoKeyBuffer
  4956.     MOVE.B    RawKeyCode,D0
  4957.     MOVE.B    D0,MixChar
  4958.     BEQ.S    GetHexKey
  4959.     CMP.B    #68,D0 ; CR
  4960.     BEQ.S    ghkreturn
  4961.     CMP.B    #69,D0 ; Esc
  4962.     BEQ.S    ghkreturn
  4963.     CMP.B    #79,D0 ; <--
  4964.     BEQ.S    ghkleft
  4965.     CMP.B    #78,D0 ; -->
  4966.     BEQ.S    ghkright
  4967.     BSR.S    CheckHexKey
  4968.     CMP.B    #16,D1
  4969.     BEQ.S    GetHexKey
  4970.     CLR.B    RawKeyCode
  4971. ghkreturn
  4972.     MOVEQ    #0,D0
  4973.     RTS
  4974.  
  4975. ghkleft    MOVEQ    #-1,D0
  4976.     RTS
  4977.  
  4978. ghkright
  4979.     MOVEQ    #1,D0
  4980.     RTS
  4981.  
  4982. CheckHexKey
  4983.     LEA    RawKeyHexTable,A0
  4984.     MOVEQ    #0,D1
  4985. chxloop    CMP.B    (A0)+,D0
  4986.     BEQ    Return1
  4987.     ADDQ.B    #1,D1
  4988.     CMP.B    #16,D1
  4989.     BNE.S    chxloop
  4990.     RTS
  4991.  
  4992. ;---- Enter Edit Commands (effects) ----
  4993.  
  4994. EditCommand
  4995.     TST.L    EditMode
  4996.     BEQ    Return1
  4997.     MOVEQ    #0,D0
  4998.     MOVE.B    RawKeyCode,D0
  4999.     BSR.S    CheckHexKey
  5000.     CMP.B    #16,D1
  5001.     BNE.S    DoEditCommand
  5002.     RTS
  5003.  
  5004. DoEditCommand
  5005.     CMP.W    #1,PattCurPos
  5006.     BNE.S    ChkPos2
  5007.     CMP.W    #1,D1
  5008.     BHI    Return1
  5009.     MOVE.L    #$FFF,D2
  5010.     CLR.W    CmdOffset
  5011.     LSL.W    #4,D1
  5012.     LSL.W    #8,D1
  5013.     BRA    UpdateCommand
  5014.  
  5015. ChkPos2    CMP.W    #2,PattCurPos
  5016.     BNE.S    ChkPos3
  5017.     MOVE.L    #$FFF,D2
  5018.     MOVE.W    #2,CmdOffset
  5019.     LSL.W    #4,D1
  5020.     LSL.W    #8,D1
  5021.     BRA    UpdateCommand
  5022.  
  5023. ChkPos3    CMP.W    #3,PattCurPos
  5024.     BNE.S    ChkPos4
  5025.     MOVE.L    #$F0FF,D2
  5026.     MOVE.W    #2,CmdOffset
  5027.     LSL.W    #8,D1
  5028.     BRA    UpdateCommand
  5029.  
  5030. ChkPos4    CMP.W    #4,PattCurPos
  5031.     BNE.S    ChkPos5
  5032.     MOVE.L    #$FF0F,D2
  5033.     MOVE.W    #2,CmdOffset
  5034.     LSL.W    #4,D1
  5035.     BRA    UpdateCommand
  5036.  
  5037. ChkPos5    CMP.W    #5,PattCurPos
  5038.     BNE.S    ChkPos7
  5039.     MOVE.L    #$FFF0,D2
  5040.     MOVE.W    #2,CmdOffset
  5041.     BRA    UpdateCommand
  5042.  
  5043. ChkPos7    CMP.W    #7,PattCurPos
  5044.     BNE.S    ChkPos8
  5045.     CMP.W    #1,D1
  5046.     BHI    Return1
  5047.     MOVE.L    #$FFF,D2
  5048.     MOVE.W    #4,CmdOffset
  5049.     LSL.W    #4,D1
  5050.     LSL.W    #8,D1
  5051.     BRA    UpdateCommand
  5052.  
  5053. ChkPos8    CMP.W    #8,PattCurPos
  5054.     BNE.S    ChkPos9
  5055.     MOVE.L    #$FFF,D2
  5056.     MOVE.W    #6,CmdOffset
  5057.     LSL.W    #4,D1
  5058.     LSL.W    #8,D1
  5059.     BRA    UpdateCommand
  5060.  
  5061. ChkPos9    CMP.W    #9,PattCurPos
  5062.     BNE.S    ChkPos10
  5063.     MOVE.L    #$F0FF,D2
  5064.     MOVE.W    #6,CmdOffset
  5065.     LSL.W    #8,D1
  5066.     BRA    UpdateCommand
  5067.  
  5068. ChkPos10
  5069.     CMP.W    #10,PattCurPos
  5070.     BNE.S    ChkPos11
  5071.     MOVE.L    #$FF0F,D2
  5072.     MOVE.W    #6,CmdOffset
  5073.     LSL.W    #4,D1
  5074.     BRA    UpdateCommand
  5075.  
  5076. ChkPos11
  5077.     CMP.W    #11,PattCurPos
  5078.     BNE.S    ChkPos13
  5079.     MOVE.L    #$FFF0,D2
  5080.     MOVE.W    #6,CmdOffset
  5081.     BRA    UpdateCommand
  5082.  
  5083. ChkPos13
  5084.     CMP.W    #13,PattCurPos
  5085.     BNE.S    ChkPos14
  5086.     CMP.W    #1,D1
  5087.     BHI    Return1
  5088.     MOVE.L    #$FFF,D2
  5089.     MOVE.W    #8,CmdOffset
  5090.     LSL.W    #4,D1
  5091.     LSL.W    #8,D1
  5092.     BRA    UpdateCommand
  5093.  
  5094. ChkPos14
  5095.     CMP.W    #14,PattCurPos
  5096.     BNE.S    ChkPos15
  5097.     MOVE.L    #$FFF,D2
  5098.     MOVE.W    #10,CmdOffset
  5099.     LSL.W    #4,D1
  5100.     LSL.W    #8,D1
  5101.     BRA    UpdateCommand
  5102.  
  5103. ChkPos15
  5104.     CMP.W    #15,PattCurPos
  5105.     BNE.S    ChkPos16
  5106.     MOVE.L    #$F0FF,D2
  5107.     MOVE.W    #10,CmdOffset
  5108.     LSL.W    #8,D1
  5109.     BRA    UpdateCommand
  5110.  
  5111. ChkPos16
  5112.     CMP.W    #16,PattCurPos
  5113.     BNE.S    ChkPos17
  5114.     MOVE.L    #$FF0F,D2
  5115.     MOVE.W    #10,CmdOffset
  5116.     LSL.W    #4,D1
  5117.     BRA    UpdateCommand
  5118.  
  5119. ChkPos17
  5120.     CMP.W    #17,PattCurPos
  5121.     BNE.S    ChkPos19
  5122.     MOVE.L    #$FFF0,D2
  5123.     MOVE.W    #10,CmdOffset
  5124.     BRA    UpdateCommand
  5125.  
  5126. ChkPos19
  5127.     CMP.W    #19,PattCurPos
  5128.     BNE.S    ChkPos20
  5129.     CMP.W    #1,D1
  5130.     BHI    Return1
  5131.     MOVE.L    #$FFF,D2
  5132.     MOVE.W    #12,CmdOffset
  5133.     LSL.W    #4,D1
  5134.     LSL.W    #8,D1
  5135.     BRA.S    UpdateCommand
  5136.  
  5137. ChkPos20
  5138.     CMP.W    #20,PattCurPos
  5139.     BNE.S    ChkPos21
  5140.     MOVE.L    #$FFF,D2
  5141.     MOVE.W    #14,CmdOffset
  5142.     LSL.W    #4,D1
  5143.     LSL.W    #8,D1
  5144.     BRA.S    UpdateCommand
  5145.  
  5146. ChkPos21
  5147.     CMP.W    #21,PattCurPos
  5148.     BNE.S    ChkPos22
  5149.     MOVE.L    #$F0FF,D2
  5150.     MOVE.W    #14,CmdOffset
  5151.     LSL.W    #8,D1
  5152.     BRA.S    UpdateCommand
  5153.  
  5154. ChkPos22
  5155.     CMP.W    #22,PattCurPos
  5156.     BNE.S    MustBePos23
  5157.     MOVE.L    #$FF0F,D2
  5158.     MOVE.W    #14,CmdOffset
  5159.     LSL.W    #4,D1
  5160.     BRA.S    UpdateCommand
  5161.  
  5162. MustBePos23
  5163.     MOVE.L    #$FFF0,D2
  5164.     MOVE.W    #14,CmdOffset
  5165. UpdateCommand
  5166.     MOVE.L    SongDataPtr,A0
  5167.     LEA    sd_patterndata(A0),A0
  5168.     MOVE.L    PatternNumber,D0
  5169.     LSL.L    #8,D0
  5170.     LSL.L    #2,D0
  5171.     ADD.L    D0,A0
  5172.     MOVEQ    #0,D0
  5173.     MOVE.W    ScrPattPos,D0
  5174.     LSL.W    #4,D0
  5175.     EXT.L    D0
  5176.     ADD.L    D0,A0
  5177.     ADD.W    CmdOffset,A0
  5178.     AND.W    D2,(A0)
  5179.     ADD.W    D1,(A0)
  5180.     MOVE.W    (A0),WordNumber
  5181.     MOVEQ    #0,D0
  5182.     MOVE.W    ScrPattPos,D0
  5183.     MULU    #7*40,D0
  5184.     MOVE.W    PattCurPos,D1
  5185.     DIVU    #6,D1
  5186.     MULU    #9,D1
  5187.     ADD.L    D1,D0
  5188.     ADD.W    #7528,D0
  5189.     MOVE.W    D0,TextOffset
  5190.     CMP.W    #0,CmdOffset
  5191.     BEQ.S    ShowInstrNibble
  5192.     CMP.W    #4,CmdOffset
  5193.     BEQ.S    ShowInstrNibble
  5194.     CMP.W    #8,CmdOffset
  5195.     BEQ.S    ShowInstrNibble
  5196.     CMP.W    #12,CmdOffset
  5197.     BEQ.S    ShowInstrNibble
  5198.     BSR    PrintHexWord
  5199. dscend    BSR    EditMoveDown
  5200.     CLR.B    RawKeyCode
  5201.     RTS
  5202.  
  5203. ShowInstrNibble
  5204.     SUBQ.W    #1,TextOffset
  5205.     MOVE.W    #1,TextLength
  5206.     MOVEQ    #0,D0
  5207.     MOVE.W    (A0),D0
  5208.     AND.W    #$F000,D0
  5209.     BNE.S    sinokok
  5210.     TST.B    BlankZeroFlag
  5211.     BEQ.S    sinokok    
  5212.     MOVE.L    #BlankInsText,D0
  5213.     BRA.S    sinprt
  5214. sinokok    LSR.W    #4,D0
  5215.     LSR.W    #7,D0
  5216.     ADD.L    #FastHexTable+1,D0
  5217. sinprt    MOVE.L    D0,ShowTextPtr
  5218.     BSR    ShowText
  5219.     BRA.S    dscend
  5220.  
  5221. ;---- Store/Insert Effect Commands ----
  5222.  
  5223. CheckStoreEffect
  5224.     MOVEQ    #0,D0
  5225.     MOVE.B    RawKeyCode,D0
  5226.     BEQ    Return1
  5227.     CMP.B    #70,D0 ; Del
  5228.     BEQ    CheckKeyboard2
  5229.     CMP.B    #10,D0
  5230.     BHI    Return1
  5231.     SUBQ.B    #1,D0
  5232.     ADD.B    D0,D0
  5233.     MOVE.L    D0,D7
  5234.     MOVE.W    PattCurPos,D0
  5235.     BSR    GetPositionPtr
  5236.     MOVE.W    ScrPattPos,D0
  5237.     LSL.W    #4,D0
  5238.     LEA    (A0,D0.W),A0
  5239.     MOVE.W    2(A0),D0
  5240.     AND.W    #$0FFF,D0
  5241.     LEA    EffectMacros,A0
  5242.     MOVE.W    D0,(A0,D7.W)
  5243.     LEA    CommandStoredText,A0
  5244.     BSR    ShowStatusText
  5245.     BSR    WaitALittle
  5246.     BRA    ShowAllRight
  5247.  
  5248. CommandStoredText dc.b 'command stored!',0
  5249.  
  5250. CheckInsertEffect
  5251.     CLR.W    InsEfx
  5252.     MOVEQ    #0,D0
  5253.     MOVE.B    RawKeyCode,D0
  5254.     BEQ    Return1
  5255.     CMP.B    #70,D0 ; Del
  5256.     BEQ    CheckKeyboard2
  5257.     CMP.B    #11,D0 ; -
  5258.     BEQ    DecreaseEffect
  5259.     CMP.B    #12,D0 ; = (+)
  5260.     BEQ.S    IncreaseEffect
  5261.     CMP.B    #13,D0 ; \
  5262.     BEQ.S    CopyEffect
  5263.     CMP.B    #10,D0
  5264.     BHI    Return1
  5265.     SUBQ.B    #1,D0
  5266.     ADD.B    D0,D0
  5267.     LEA    EffectMacros,A0
  5268.     MOVE.W    (A0,D0.W),InsEfx
  5269. DoInsEffect
  5270.     MOVE.B    #70,RawKeyCode
  5271.     BRA    CheckNoteKeys
  5272.  
  5273. GetLastEffect
  5274.     MOVE.W    PattCurPos,D0
  5275.     BSR    GetPositionPtr
  5276.     MOVE.W    ScrPattPos,D0
  5277.     SUBQ.W    #1,D0
  5278.     AND.W    #$3F,D0
  5279.     LSL.W    #4,D0
  5280.     LEA    (A0,D0.W),A0
  5281.     MOVE.W    2(A0),D0
  5282.     AND.W    #$0FFF,D0
  5283.     RTS
  5284.  
  5285. CopyEffect
  5286.     BSR.S    GetLastEffect
  5287.     MOVE.W    D0,InsEfx
  5288.     BRA.S    DoInsEffect
  5289.  
  5290. IncreaseEffect
  5291.     BSR.S    GetLastEffect
  5292.     MOVE.W    D0,D1
  5293.     AND.W    #$0F00,D1
  5294.     CMP.W    #$0E00,D1
  5295.     BEQ.S    IncECom
  5296.     ADDQ.B    #1,D0
  5297.     MOVE.W    D0,InsEfx
  5298.     BRA.S    DoInsEffect
  5299.  
  5300. IncECom    MOVE.W    D0,D1
  5301.     ADDQ.B    #1,D1
  5302.     AND.B    #$0F,D1
  5303.     AND.W    #$0FF0,D0
  5304.     OR.B    D1,D0
  5305.     MOVE.W    D0,InsEfx
  5306.     BRA.S    DoInsEffect
  5307.  
  5308. DecreaseEffect
  5309.     BSR.S    GetLastEffect
  5310.     MOVE.W    D0,D1
  5311.     AND.W    #$0F00,D1
  5312.     CMP.W    #$0E00,D1
  5313.     BEQ.S    DecECom
  5314.     SUBQ.B    #1,D0
  5315.     MOVE.W    D0,InsEfx
  5316.     BRA    DoInsEffect
  5317.  
  5318. DecECom    MOVE.W    D0,D1
  5319.     SUBQ.B    #1,D1
  5320.     AND.B    #$0F,D1
  5321.     AND.W    #$0FF0,D0
  5322.     OR.B    D1,D0
  5323.     MOVE.W    D0,InsEfx
  5324.     BRA    DoInsEffect
  5325.  
  5326. InsEfx    dc.w 0
  5327.  
  5328. ;---- Check Keyboard for notekeys ----
  5329.  
  5330. CheckKeyboard
  5331.     TST.B    RawKeyCode
  5332.     BEQ    Return1
  5333.     TST.W    LeftAmigaStatus
  5334.     BNE    Return1
  5335.     TST.W    CtrlKeyStatus
  5336.     BNE    Return1
  5337.     TST.W    ShiftKeyStatus
  5338.     BNE    CheckStoreEffect
  5339.     TST.W    AltKeyStatus
  5340.     BNE    CheckInsertEffect
  5341. CheckKeyboard2
  5342.     MOVE.W    PattCurPos,D0
  5343.     BEQ.S    CheckNoteKeys
  5344.     CMP.W    #6,D0
  5345.     BEQ.S    CheckNoteKeys
  5346.     CMP.W    #12,D0
  5347.     BEQ.S    CheckNoteKeys
  5348.     CMP.W    #18,D0
  5349.     BEQ.S    CheckNoteKeys
  5350.     TST.L    EditMode
  5351.     BNE    EditCommand
  5352.     RTS    
  5353.  
  5354. CheckNoteKeys
  5355.     LEA    RawKeyScaleTable,A0
  5356.     MOVE.B    RawKeyCode,D1
  5357.     MOVEQ    #38,D0
  5358. cnkloop    CMP.B    0(A0,D0.W),D1
  5359.     BEQ.S    NoteKeyPressed
  5360.     DBRA    D0,cnkloop
  5361.     RTS
  5362.  
  5363. NoteKeyPressed
  5364.     CLR.B    RawKeyCode
  5365.     MOVE.L    KeyTransTabPtr,A1
  5366.     MOVE.B    (A1,D0.W),D0
  5367.     CMP.W    #36,D0
  5368.     BHS.S    nkpskip
  5369.     MOVE.L    SplitAddress,D1
  5370.     BEQ.S    nkpskip
  5371.     CLR.L    SplitAddress
  5372.     MOVE.L    D1,A0
  5373.     MOVE.B    D0,(A0)
  5374.     MOVE.W    SamNoteType,D1
  5375.     BEQ    ShowSplit
  5376.     CLR.W    SamNoteType
  5377.     AND.W    #$FF,D0
  5378.     MOVE.W    D0,(A0)
  5379.     CMP.W    #1,D1
  5380.     BEQ.S    loclab1
  5381.     CMP.W    #3,D1
  5382.     BEQ    ShowS2TuneNote
  5383.     CMP.W    #4,D1
  5384.     BEQ    ShowAllRight
  5385.     JMP    ShowResamNote
  5386. loclab1    JMP    ShowSamNote
  5387. nkpskip    MOVE.W    InsNum,PlayInsNum
  5388.     TST.B    SplitFlag
  5389.     BEQ.S    nkpskip2
  5390.     LEA    SplitInstrTable,A1
  5391.     MOVE.B    (A1,D0.W),D1
  5392.     BEQ.S    nkpskip3
  5393.     MOVE.B    D1,PlayInsNum+1
  5394. nkpskip3
  5395.     LEA    SplitTransTable,A1
  5396.     MOVE.B    (A1,D0.W),D0
  5397. nkpskip2
  5398.     MOVEQ    #0,D2
  5399. playtheinstr
  5400.     LEA    PeriodTable,A1 ; note in d0 here
  5401.     MOVE.L    D0,D4
  5402.     LSL.W    #1,D0
  5403.     MOVEQ    #0,D3
  5404.     MOVE.W    (A1,D0.W),D3
  5405.  
  5406.     MOVE.L    SongDataPtr,A0 ; This fixes finetune...
  5407.     LEA    14(A0),A0
  5408.     MOVE.W    InsNum,D1
  5409.     BNE.S    nkpskipit
  5410.     MOVE.W    LastInsNum,D1
  5411. nkpskipit
  5412.     MULU    #30,D1
  5413.     ADD.L    D1,A0
  5414.     MOVEQ    #0,D1
  5415.     MOVE.B    (A0),D1 ; get finetune
  5416.     MULU    #37*2,D1
  5417.     ADD.L    D1,A1
  5418.     MOVE.W    (A1,D0.W),CurrentPlayNote
  5419.     TST.L    D2
  5420.     BEQ.S    nkpnrml
  5421.     CMP.B    #2,pnoteflag
  5422.     BNE    antpskip
  5423.  
  5424. nkpnrml    TST.L    EditMode
  5425.     BEQ    antpskip
  5426. AddNoteToPattern
  5427.     MOVE.L    SongDataPtr,A0
  5428.     LEA    sd_patterndata(A0),A0    ; Find first pattern
  5429.     MOVE.L    PatternNumber,D0
  5430.     LSL.L    #8,D0
  5431.     LSL.L    #2,D0
  5432.     ADD.L    D0,A0    ; Find current pattern
  5433.     MOVEQ    #0,D0
  5434.     MOVE.W    ScrPattPos,D0
  5435.     BSR    QuantizeCheck
  5436.     LSL.W    #4,D0
  5437.     EXT.L    D0
  5438.     ADD.L    D0,A0    ; Find current pos
  5439.     MOVE.W    PattCurPos,D0
  5440.     DIVU    #6,D0
  5441.     LSL.W    #2,D0
  5442.     EXT.L    D0
  5443.     ADD.L    D0,A0    ; Find current channel
  5444.     TST.W    AltKeyStatus
  5445.     BEQ.S    antpsks
  5446.     AND.L    #$FFFFF000,(A0)
  5447.     MOVE.W    InsEfx,D0
  5448.     OR.W    D0,2(A0)
  5449.     BRA.S    antp3
  5450. antpsks    TST.W    ShiftKeyStatus
  5451.     BEQ.S    antpskip2
  5452.     CLR.L    (A0)
  5453. antpskip2
  5454.     MOVE.W    D3,(A0)    ; Put note into pattern
  5455.     BEQ.S    antp2
  5456.     TST.B    AutoInsFlag
  5457.     BEQ.S    antp4
  5458.     MOVE.W    VolumeEfx,2(A0)
  5459. antp4    MOVEQ    #0,D0
  5460.     MOVE.W    PlayInsNum,D0
  5461.     LSL.W    #4,D0
  5462.     AND.B    #$F,2(A0)
  5463.     ADD.B    D0,2(A0)
  5464.     LSL.W    #4,D0
  5465.     AND.W    #$F000,D0
  5466.     OR.W    D0,(A0)
  5467.     BRA.S    antp3
  5468.  
  5469. antp2    AND.W    #$0FFF,2(A0)
  5470. antp3    MOVE.W    2(A0),CurrCmds
  5471.     MOVE.L    NoteNamesPtr,A0
  5472.     LSL.W    #2,D4
  5473.     EXT.L    D4
  5474.     ADD.L    D4,A0
  5475.     MOVE.L    A0,ShowTextPtr
  5476.     MOVE.W    #3,TextLength
  5477.     MOVEQ    #0,D0
  5478.     MOVE.W    ScrPattPos,D0
  5479.     BSR    QuantizeCheck
  5480.     MULU    #7*40,D0
  5481.     MOVEQ    #0,D1
  5482.     MOVE.W    PattCurPos,D1
  5483.     DIVU    #6,D1
  5484.     MULU    #9,D1
  5485.     ADD.L    D1,D0
  5486.     ADD.W    #7524,D0
  5487.     MOVE.W    D0,TextOffset
  5488.     TST.W    AltKeyStatus
  5489.     BEQ.S    antpnot
  5490.     ADDQ.W    #4,D0
  5491.     MOVE.W    D0,TextOffset
  5492.     BRA.S    antpalt
  5493. antpnot    BSR    ShowText    ; Show notename
  5494.     BSR    PrintHiInstrNum
  5495. antpalt
  5496.     MOVE.W    CurrCmds,WordNumber
  5497.     BSR    PrintHexWord
  5498.     BSR    EditMoveDown
  5499. antpskip
  5500.     TST.W    DidQuantize
  5501.     BNE.S    testmul
  5502.     TST.W    CurrentPlayNote
  5503.     BNE    PlayNote
  5504. testmul    TST.B    MultiFlag
  5505.     BEQ    Return1
  5506. GotoNextMulti
  5507.     MOVEQ    #0,D0
  5508.     MOVE.W    PattCurPos,D0
  5509.     DIVU    #6,D0
  5510.     LEA    MultiModeNext,A0
  5511.     MOVE.B    (A0,D0.W),D0
  5512.     SUBQ.W    #1,D0
  5513.     AND.W    #3,D0
  5514.     MULU    #6,D0
  5515.     MOVE.W    D0,PattCurPos
  5516.     BRA    UpdateCursorPos
  5517.  
  5518. QuantizeCheck
  5519.     TST.L    RunMode
  5520.     BEQ.S    qcend
  5521.     MOVEQ    #0,D1
  5522.     MOVE.B    QuantizeValue,D1
  5523.     BEQ.S    qcend
  5524.     CMP.W    #1,D1
  5525.     BEQ.S    QuanOne
  5526.     MOVE.W    #1,DidQuantize
  5527.     MOVE.L    D1,D2
  5528.     LSR.W    #1,D2
  5529.     ADD.W    D0,D2
  5530.     AND.W    #$003F,D2
  5531.     DIVU    D1,D2
  5532.     MULU    D1,D2
  5533.     CMP.W    D0,D2
  5534.     BHI.S    qcskip
  5535.     CLR.W    DidQuantize
  5536. qcskip    MOVE.W    D2,D0
  5537.     RTS
  5538.  
  5539. QuanOne    MOVE.L    CurrSpeed,D1
  5540.     LSR.L    #1,D1
  5541.     CMP.L    Counter,D1
  5542.     BLS.S    QuantToNextNote
  5543. qcend    CLR.W    DidQuantize
  5544.     RTS    
  5545.  
  5546. QuantToNextNote
  5547.     ADDQ.W    #1,D0
  5548.     AND.W    #$003F,D0
  5549.     MOVE.W    #1,DidQuantize
  5550.     RTS
  5551.  
  5552. PlayNote
  5553.     CMP.W    #18,PattCurPos
  5554.     BNE.S    ChkChan3
  5555.     LEA    $DFF0D0,A5
  5556.     LEA    audchan4temp,A4
  5557.     BRA.S    DoPlayNote
  5558.  
  5559. ChkChan3
  5560.     CMP.W    #12,PattCurPos
  5561.     BNE.S    ChkChan2
  5562.     LEA    $DFF0C0,A5
  5563.     LEA    audchan3temp,A4
  5564.     BRA.S    DoPlayNote
  5565.  
  5566. ChkChan2
  5567.     CMP.W    #6,PattCurPos
  5568.     BNE.S    ChkChan1
  5569.     LEA    $DFF0B0,A5
  5570.     LEA    audchan2temp,A4
  5571.     BRA.S    DoPlayNote
  5572.  
  5573. ChkChan1
  5574.     TST.W    PattCurPos
  5575.     BNE    Return1
  5576.     LEA    $DFF0A0,A5
  5577.     LEA    audchan1temp,A4
  5578. DoPlayNote
  5579.     MOVE.L    A5,NoteAddr
  5580.     LEA    SampleInfo,A6
  5581.     MOVE.W    PlayInsNum,D0
  5582.     BEQ.S    dpnplay
  5583.     LSL.L    #2,D0
  5584.     LEA    SamplePtrs,A0
  5585.     LEA    SampleInfo2,A6
  5586.     MOVE.L    0(A0,D0.W),si_pointer2
  5587.     MOVE.L    SongDataPtr,A0
  5588.     LEA    -10(A0),A0
  5589.     MOVE.W    PlayInsNum,D0
  5590.     MOVE.B    D0,PlayInsNum2
  5591.     MULU    #30,D0
  5592.     ADD.L    D0,A0
  5593.     MOVE.L    22(A0),SampleInfo2
  5594.     MOVE.L    26(A0),si_long2
  5595. dpnplay    MOVE.B    PlayInsNum2,n_samplenum(A4)
  5596.     MOVE.W    4(A6),D0 ; repeat
  5597.     BNE.S    dpn2
  5598.     MOVE.W    (A6),D0  ; length
  5599.     BRA.S    dpn3
  5600. dpn2    ADD.W    6(A6),D0 ; add replen
  5601. dpn3    MOVEQ    #0,D1
  5602.     MOVE.B    3(A6),D1
  5603.     MOVE.W    D1,8(A5)        ; Set volume
  5604.     MOVE.B    D1,n_volume(A4)
  5605.     MOVE.W    CurrentPlayNote,6(A5)    ; Set period
  5606.     MOVE.W    CurrentPlayNote,n_period(A4)
  5607.     MOVE.W    n_dmabit(A4),$DFF096    ; Channel DMA off
  5608.     MOVE.L    8(A6),D1
  5609.     ADD.L    StartOfs,D1
  5610.     MOVE.L    D1,(A5)        ; Set sampledata pointer
  5611.     CLR.L    StartOfs
  5612.     MOVE.L    D1,n_start(A4)
  5613.     MOVE.W    D0,4(A5)        ; Set length
  5614.     MOVE.W    D0,n_length(A4)
  5615.     BNE.S    dpnnz
  5616.     MOVEQ    #1,D0
  5617.     MOVE.W    D0,4(A5)
  5618.     MOVE.W    D0,n_length(A4)
  5619. dpnnz    MOVE.W    CurrentPlayNote,D0
  5620.     BSR    PlayNoteAnalyze
  5621.     MOVE.W    DMAWait,D0
  5622. dpnolp1    DBRA    D0,dpnolp1
  5623.     MOVE.W    n_dmabit(A4),D0
  5624.     AND.W    ActiveChannels,D0
  5625.     OR.W    #$8000,D0
  5626.     MOVE.W    D0,$DFF096    ; Turn DMA back on
  5627.     MOVE.W    DMAWait,D0
  5628. dpnolp2    DBRA    D0,dpnolp2
  5629.     MOVEQ    #0,D1
  5630.     MOVE.W    4(A6),D1 ; repeat*2
  5631.     ADD.L    D1,D1
  5632.     ADD.L    8(A6),D1 ; + startptr
  5633.     MOVE.L    D1,(A5)    ; Set loop pointer
  5634.     MOVE.L    D1,n_loopstart(A4)
  5635.     MOVE.W    6(A6),4(A5)    ; Set loop length
  5636.     MOVE.W    6(A6),n_replen(A4)
  5637.     ST    n_trigger(A4)
  5638.     BRA    testmul
  5639.  
  5640. PlayInsNum2    dc.b 0,0
  5641.  
  5642. ;---- Check Cursor Arrow Keys ----
  5643.  
  5644. ArrowKeys
  5645.     CMP.B    #4,EnterTextFlag
  5646.     BEQ    Return1
  5647.     MOVE.B    RawKeyCode,D0
  5648.     TST.W    GetLineFlag
  5649.     BNE.S    arkeskip
  5650.     TST.W    ShiftKeyStatus
  5651.     BNE.S    arkeskip
  5652.     TST.W    AltKeyStatus
  5653.     BNE.S    arkeskip
  5654.     CMP.W    #2,CurrScreen
  5655.     BEQ.S    arkeskip
  5656.     CMP.B    #78,D0
  5657.     BEQ    RightArrow
  5658.     CMP.B    #79,D0
  5659.     BEQ    LeftArrow
  5660. arkeskip
  5661.     CMP.B    #76,D0
  5662.     BEQ.S    UpArrow
  5663.     CMP.B    #77,D0
  5664.     BEQ    DownArrow
  5665.     CLR.W    ArrowPressed
  5666.     RTS    
  5667.  
  5668. ArrowPressed    dc.w    0
  5669. ArrowRepCounter    dc.w    0
  5670.  
  5671. UpArrow    TST.L    RunMode
  5672.     BNE    Return1
  5673.     CMP.W    #2,CurrScreen
  5674.     BEQ    Return1
  5675.     CMP.W    #3,CurrScreen
  5676.     BEQ    Return1
  5677.     CMP.W    #4,CurrScreen
  5678.     BEQ    Return1
  5679.     CMP.W    #6,CurrScreen
  5680.     BEQ    Return1
  5681.     TST.W    ArrowPressed
  5682.     BEQ.S    MoveOneUp
  5683.     ADDQ.W    #1,ArrowRepCounter
  5684.     TST.W    AltKeyStatus
  5685.     BNE.S    AltUpArrow
  5686.     TST.W    ShiftKeyStatus
  5687.     BNE.S    ShiftUpArrow
  5688.     CMP.W    #6,ArrowRepCounter
  5689.     BPL.S    MoveOneUp
  5690.     RTS
  5691.  
  5692. ShiftUpArrow
  5693.     CMP.W    #3,ArrowRepCounter
  5694.     BPL.S    MoveOneUp
  5695.     RTS
  5696.  
  5697. AltUpArrow
  5698.     CMP.W    #1,ArrowRepCounter
  5699.     BPL.S    MoveOneUp
  5700.     RTS
  5701.  
  5702. MoveOneUp
  5703.     CLR.W    ArrowRepCounter
  5704.     MOVE.W    #$FFFF,ArrowPressed
  5705.     CMP.L    #'patt',RunMode
  5706.     BEQ    Return1
  5707.     SUBQ.W    #1,ScrPattPos
  5708.     AND.W    #$003F,ScrPattPos
  5709.     BRA    SetScrPatternPos
  5710.  
  5711. DownArrow
  5712.     TST.L    RunMode
  5713.     BNE    Return1
  5714.     CMP.W    #2,CurrScreen
  5715.     BEQ    Return1
  5716.     CMP.W    #3,CurrScreen
  5717.     BEQ    Return1
  5718.     CMP.W    #4,CurrScreen
  5719.     BEQ    Return1
  5720.     CMP.W    #6,CurrScreen
  5721.     BEQ    Return1
  5722.     TST.W    ArrowPressed
  5723.     BEQ.S    MoveOneDown
  5724.     ADDQ.W    #1,ArrowRepCounter
  5725.     TST.W    AltKeyStatus
  5726.     BNE.S    AltDownArrow
  5727.     TST.W    ShiftKeyStatus
  5728.     BNE.S    ShiftDownArrow
  5729.     CMP.W    #6,ArrowRepCounter
  5730.     BPL.S    MoveOneDown
  5731.     RTS
  5732.  
  5733. ShiftDownArrow
  5734.     CMP.W    #3,ArrowRepCounter
  5735.     BPL.S    MoveOneDown
  5736.     RTS    
  5737.  
  5738. AltDownArrow
  5739.     CMP.W    #1,ArrowRepCounter
  5740.     BPL.S    MoveOneDown
  5741.     RTS    
  5742.  
  5743. MoveOneDown
  5744.     CLR.W    ArrowRepCounter
  5745.     MOVE.W    #$FFFF,ArrowPressed
  5746.     TST.L    RunMode
  5747.     BNE    Return1
  5748.     ADDQ.W    #1,ScrPattPos
  5749.     AND.W    #$003F,ScrPattPos
  5750.     BRA    SetScrPatternPos
  5751.  
  5752. EditMoveDown
  5753.     TST.L    RunMode
  5754.     BNE    Return1
  5755.     MOVE.W    EditMoveAdd,D0
  5756.     ADD.W    D0,ScrPattPos
  5757.     AND.W    #$003F,ScrPattPos
  5758.     BRA    SetScrPatternPos
  5759.  
  5760. EditMoveAdd    dc.w 1
  5761.  
  5762. RightArrow
  5763.     TST.W    ArrowPressed
  5764.     BEQ.S    MoveOneRight
  5765.     ADDQ.W    #1,ArrowRepCounter
  5766.     CMP.W    #6,ArrowRepCounter
  5767.     BPL.S    MoveOneRight
  5768.     RTS    
  5769.  
  5770. PatternOneUp
  5771.     ADDQ.L    #1,PatternNumber
  5772.     AND.L    #$3F,PatternNumber
  5773.     BSR    Wait_4000
  5774.     BRA    RedrawPattern
  5775.  
  5776. MoveOneRight
  5777.     CLR.W    ArrowRepCounter
  5778.     MOVE.W    #$FFFF,ArrowPressed
  5779.     ADDQ.W    #1,PattCurPos
  5780.     CMP.W    #24,PattCurPos
  5781.     BMI.S    morskip
  5782.     CLR.W    PattCurPos
  5783. morskip    BRA.S    UpdateCursorPos
  5784.  
  5785. LeftArrow
  5786.     TST.W    ArrowPressed
  5787.     BEQ.S    MoveOneLeft
  5788.     ADDQ.W    #1,ArrowRepCounter
  5789.     CMP.W    #6,ArrowRepCounter
  5790.     BPL.S    MoveOneLeft
  5791.     RTS    
  5792.  
  5793. PatternOneDown
  5794.     SUBQ.L    #1,PatternNumber
  5795.     AND.L    #$3F,PatternNumber
  5796.     BSR    Wait_4000
  5797.     BRA    RedrawPattern
  5798.  
  5799. MoveOneLeft
  5800.     CLR.W    ArrowRepCounter
  5801.     MOVE.W    #$FFFF,ArrowPressed
  5802.     SUBQ.W    #1,PattCurPos
  5803.     TST.W    PattCurPos
  5804.     BPL    UpdateCursorPos
  5805.     MOVE.W    #23,PattCurPos
  5806. UpdateCursorPos
  5807.     TST.W    SamScrEnable
  5808.     BNE    Return1
  5809.     MOVE.W    PattCurPos,D0
  5810.     LEA    CursorPosTable,A0
  5811.     MOVE.B    0(A0,D0.W),D0
  5812.     LSL.W    #3,D0
  5813.     ADD.W    #9,D0
  5814.     MOVE.W    #$BD,D1
  5815.     MOVEQ    #14,D2 ; 14 lines
  5816.     LEA    CursorSpriteData,A0
  5817.     BRA    SetSpritePos
  5818.  
  5819. ArrowKeys2
  5820.     MOVE.B    RawKeyCode,D0
  5821.     CMP.B    #76,D0
  5822.     BEQ.S    UpArrow2
  5823.     CMP.B    #77,D0
  5824.     BEQ.S    DownArrow2
  5825.     CMP.B    #79,D0
  5826.     BEQ.S    LeftArrow2
  5827.     CMP.B    #78,D0
  5828.     BEQ    RightArrow2
  5829.     RTS
  5830.  
  5831. UpArrow2
  5832.     CMP.W    #2,CurrScreen
  5833.     BEQ    HelpUp
  5834.     CMP.W    #3,CurrScreen
  5835.     BEQ    FilenameOneUp
  5836.     CMP.W    #4,CurrScreen
  5837.     BEQ    PED_OneUp
  5838.     CMP.W    #6,CurrScreen
  5839.     BEQ    PLSTOneUp
  5840.     RTS
  5841.  
  5842. DownArrow2
  5843.     CMP.W    #2,CurrScreen
  5844.     BEQ    HelpDown
  5845.     CMP.W    #3,CurrScreen
  5846.     BEQ    FilenameOneDown
  5847.     CMP.W    #4,CurrScreen
  5848.     BEQ    PED_OneDown
  5849.     CMP.W    #6,CurrScreen
  5850.     BEQ    PLSTOneDown
  5851.     RTS
  5852.  
  5853. LeftArrow2
  5854.     TST.W    ShiftKeyStatus
  5855.     BNE    PositionDown
  5856.     TST.W    AltKeyStatus
  5857.     BNE    PatternOneDown
  5858.     TST.W    CtrlKeyStatus
  5859.     BNE    SampleNumDown
  5860.     CMP.W    #2,CurrScreen
  5861.     BEQ    HelpLeft
  5862.     RTS
  5863.  
  5864. RightArrow2
  5865.     TST.W    ShiftKeyStatus
  5866.     BNE    PositionUp
  5867.     TST.W    AltKeyStatus
  5868.     BNE    PatternOneUp
  5869.     TST.W    CtrlKeyStatus
  5870.     BNE    SampleNumUp
  5871.     CMP.W    #2,CurrScreen
  5872.     BEQ    HelpRight
  5873.     RTS
  5874.  
  5875. ;---- Update Line Cursor Position ----
  5876.  
  5877. UpdateLineCurPos
  5878.     MOVE.W    LineCurX,D0
  5879.     MOVE.W    LineCurY,D1
  5880.     SUBQ.W    #1,D0
  5881.     MOVEQ    #2,D2
  5882.     LEA    LineCurSpriteData,A0
  5883.     BRA    SetSpritePos
  5884.  
  5885. ;---- Check Gadgets ----
  5886.  
  5887. CheckGadgets
  5888.     BSR    UpdatePointerPos
  5889.     BSR.S    CheckGadgets2
  5890.     CLR.W    notogfl
  5891.     CMP.W    #$FFFF,GadgRepeat
  5892.     BEQ.S    CgRepeat
  5893.     MOVEQ    #0,D0
  5894. cgloop    ADDQ.L    #1,D0
  5895.     TST.B    HHFlag
  5896.     BEQ.S    cgnorma
  5897.     CMP.L    #40000*5,D0
  5898.     BEQ.S    CgRepeat
  5899.     BRA.S    cgnorm2
  5900. cgnorma    CMP.L    #40000,D0
  5901.     BEQ.S    CgRepeat
  5902. cgnorm2    BTST    #6,$BFE001
  5903.     BEQ.S    cgloop
  5904.     CLR.W    UpOrDown
  5905.     BRA    MainLoop
  5906.  
  5907. CgRepeat
  5908.     TST.B    HHFlag
  5909.     BEQ.S    cgrepe2
  5910.     BSR    Wait_4000
  5911. cgrepe2    MOVE.W    #$FFFF,GadgRepeat
  5912.     BTST    #6,$BFE001
  5913.     BEQ.S    CheckGadgets
  5914.     CLR.W    GadgRepeat
  5915.     CLR.W    UpOrDown
  5916.     BRA    MainLoop
  5917.  
  5918. CheckGadgets2
  5919.     MOVE.W    MouseX,MouseX2
  5920.     BNE.S    cgskip
  5921.     TST.W    MouseY
  5922.     BNE.S    cgskip
  5923. ChkQuit    LEA    QuitPTText,A0
  5924.     BSR    AreYouSure
  5925.     BEQ    ExitCleanup    ; Quit PT!
  5926.     RTS
  5927. cgskip    MOVE.W    MouseY,MouseY2
  5928.     CMP.W    #4,CurrScreen
  5929.     BEQ    CheckPresEdGadgs
  5930.     MOVE.W    MouseX2,D0
  5931.     MOVE.W    MouseY2,D1
  5932.     CMP.W    #122,D1
  5933.     BHS    WantedPattGadg
  5934.     CMP.W    #111,D1
  5935.     BHS    CheckSmplNamOrLoad
  5936.     CMP.W    #100,D1
  5937.     BHS    TypeInSongName
  5938.     CMP.W    #120,D0
  5939.     BLO.S    cgskip2
  5940.     CMP.W    #6,CurrScreen
  5941.     BEQ    CheckPLSTGadgs
  5942. cgskip2    CMP.W    #2,CurrScreen
  5943.     BEQ    Return1
  5944.     CMP.W    #3,CurrScreen    ; Screen 3 is DirScreen...
  5945.     BEQ    CheckDirGadgets
  5946.     CMP.W    #5,CurrScreen
  5947.     BEQ    CheckSetupGadgs
  5948.     CMP.W    #7,CurrScreen
  5949.     BEQ    CheckSetup2Gadgs
  5950.     CMP.W    #45,D1
  5951.     BHS.S    cgskip3
  5952.     CMP.W    #306,D0
  5953.     BHS    CheckToggle
  5954.     CMP.W    #244,D0
  5955.     BHS.S    MainMenu3
  5956.     CMP.W    #181,D0
  5957.     BHS.S    MainMenu2
  5958.     CMP.W    #120,D0
  5959.     BHS    MainMenu1
  5960. cgskip3    CMP.W    #120,D0
  5961.     BHS.S    cgskip4
  5962.     CMP.W    #109,D0
  5963.     BHS    DownGadgets
  5964.     CMP.W    #98,D0
  5965.     BHS    UpGadgets
  5966.     CMP.W    #62,D0
  5967.     BHS    EnterNumGadg
  5968.     BRA    PosInsDelGadgs
  5969. cgskip4    TST.B    EdEnable
  5970.     BNE    CheckEditOpGadgs
  5971.     BRA    ToggleAnaScope
  5972.  
  5973. MainMenu3
  5974.     MOVE.W    MouseY2,D0
  5975.     CMP.W    #34,D0
  5976.     BHS    DPMGFIH
  5977.     CMP.W    #23,D0
  5978.     BHS    Setup
  5979.     CMP.W    #12,D0
  5980.     BHS    PresetEditor
  5981.     TST.W    D0
  5982.     BHS    PLST
  5983.     RTS    
  5984.  
  5985. DPMGFIH    JMP    SamplerScreen
  5986.  
  5987. MainMenu2
  5988.     MOVE.W    MouseY2,D0
  5989.     CMP.W    #3,CurrScreen
  5990.     BNE    mm2skip
  5991.     CMP.W    #44,D0
  5992.     BHS    CheckDirGadgets2
  5993. mm2skip    CMP.W    #44,D0
  5994.     BHS    Return1
  5995.     CMP.W    #34,D0
  5996.     BHS    ShowDirScreen
  5997.     CMP.W    #23,D0
  5998.     BHS    DoEditOp
  5999.     CMP.W    #12,D0
  6000.     BHS    ClearAll
  6001.     TST.W    D0
  6002.     BHS    StopIt
  6003.     RTS    
  6004.  
  6005. MainMenu1
  6006.     MOVE.W    MouseY2,D0
  6007.     CMP.W    #3,CurrScreen
  6008.     BNE.S    mm1skip
  6009.     CMP.W    #44,D0
  6010.     BHS    CheckDirGadgets2
  6011. mm1skip    CMP.W    #44,D0
  6012.     BHS    Return1
  6013.     CMP.W    #34,D0
  6014.     BHS    RecordPattern
  6015.     CMP.W    #23,D0
  6016.     BHS    Edit
  6017.     CMP.W    #12,D0
  6018.     BHS    PlayPattern
  6019.     TST.W    D0
  6020.     BHS    PlaySong
  6021.     RTS
  6022.  
  6023.  
  6024. ;---- Disk Format ----
  6025.  
  6026. DiskFormatGadg
  6027.     BSR    WaitForButtonUp
  6028.     BSR    Wait_4000
  6029.     BSR    ClearFileNames
  6030.     BSR    SwapFormatBox
  6031.     BSR    WaitForButtonUp
  6032.     LEA    AreYouSureText,A0
  6033.     BSR    ShowStatusText
  6034. fmtbuttonchk
  6035.     BSR    DoKeyBuffer
  6036.     MOVE.B    RawKeyCode,D0
  6037.     CMP.B    #69,D0 ; ESC
  6038.     BEQ.S    fmtbend
  6039.     BTST    #6,$BFE001
  6040.     BNE.S    fmtbuttonchk
  6041.     MOVEM.W    MouseX,D0/D1
  6042.     CMP.W    #89,D0
  6043.     BLO.S    fmtbuttonchk
  6044.     CMP.W    #212,D0
  6045.     BHI.S    fmtbuttonchk
  6046.     CMP.W    #72,D1
  6047.     BLO.S    fmtbuttonchk
  6048.     CMP.W    #82,D1
  6049.     BHI.S    fmtbuttonchk
  6050.     CMP.W    #136,D0
  6051.     BLO.S    DiskFormat
  6052.     CMP.W    #166,D0
  6053.     BLO.S    fmtbuttonchk
  6054. fmtbend    BSR.S    SwapFormatBox
  6055.     BRA    SetErrorPtrCol
  6056.  
  6057. SwapFormatBox
  6058.     LEA    FormatBoxData,A1
  6059.     LEA    FormatBoxPos,A0
  6060.     MOVEQ    #38,D0
  6061. sfbloop1
  6062.     MOVEQ    #17,D1
  6063. sfbloop2
  6064.     MOVE.B    10240(A0),D2
  6065.     MOVE.B    702(A1),10240(A0)
  6066.     MOVE.B    D2,702(A1)
  6067.     MOVE.B    (A0),D2
  6068.     MOVE.B    (A1),(A0)+
  6069.     MOVE.B    D2,(A1)+
  6070.     DBRA    D1,sfbloop2
  6071.     LEA    $0016(A0),A0
  6072.     DBRA    D0,sfbloop1
  6073.     RTS
  6074.  
  6075. DiskFormat
  6076.     BSR    SwapFormatBox
  6077.     BSR    ShowAllRight
  6078.     BSR    ClearFileNames
  6079.     LEA    PlsEntNamText,A0
  6080.     MOVE.W    #2570,D1
  6081.     MOVEQ    #17,D0
  6082.     BSR    ShowText3
  6083.     LEA    OfVolumeText,A0
  6084.     MOVE.B    #'_',15(A0)
  6085.     MOVE.B    #'_',16(A0)
  6086.     MOVE.W    #2810,D1
  6087.     MOVEQ    #17,D0
  6088.     BSR    ShowText3
  6089.     BSR    SetWaitPtrCol
  6090.     LEA    DiskNumText1,A6
  6091.     MOVEQ    #1,D0
  6092. df_loop    CLR.B    0(A6,D0.W)
  6093.     DBRA    D0,df_loop
  6094.     MOVE.L    A6,TextEndPtr
  6095.     MOVE.L    A6,ShowTextPtr
  6096.     ADDQ.L    #2,TextEndPtr
  6097.     MOVE.B    #1,EnterTextFlag
  6098.     MOVE.W    #2825,A4
  6099.     MOVE.W    #2,TextLength
  6100.     BSR    GetTextLine
  6101.     CLR.B    EnterTextFlag
  6102.     CLR.L    TextEndPtr
  6103.     BSR    ClearFileNames
  6104.     MOVE.L    4.W,A6
  6105.     MOVE.L    #5632,D0
  6106.     MOVEQ    #MEMF_CHIP,D1
  6107.     JSR    LVOAllocMem(A6)
  6108.     MOVE.L    D0,FormatDataPtr
  6109.     BEQ    df_memerr
  6110.     BSR    DoShowFreeMem
  6111.     SUB.L    A1,A1
  6112.     JSR    LVOFindTask(A6)
  6113.     MOVE.L    D0,ProcessPtr
  6114.     LEA    TrackdiskPort,A1
  6115.     JSR    LVOAddPort(A6)
  6116.     LEA    TrackdiskIOExtTD,A1
  6117.     MOVEQ    #0,D0
  6118.     MOVEQ    #0,D1
  6119.     LEA    TrackdiskName,A0
  6120.     JSR    LVOOpenDevice(A6)
  6121.     MOVE.L    #TrackdiskPort,TDPortPtr
  6122.     CLR.W    CylinderNumber
  6123.     LEA    TrackdiskIOExtTD,A1
  6124.     MOVE.W    #TD_CHANGESTATE,IO_COMMAND(A1)
  6125.     JSR    LVODoIO(A6)    ; Check if disk in drive
  6126.     TST.L    IO_ACTUAL(A1)
  6127.     BEQ.S    df_indrive
  6128.     LEA    NoDiskInDriveText,A0
  6129.     BSR    ShowStatusText
  6130.     MOVE.W    #50,WaitTime
  6131.     BSR    SetErrorPtrCol
  6132.     BRA    df_cleanup
  6133.  
  6134. df_indrive
  6135.     LEA    TrackdiskIOExtTD,A1
  6136.     MOVE.W    #TD_PROTSTATUS,IO_COMMAND(A1)
  6137.     JSR    LVODoIO(A6)    ; Check write protect
  6138.     TST.L    IO_ACTUAL(A1)
  6139.     BEQ.S    df_noprot
  6140.     LEA    WriteProtectedText,A0
  6141.     BSR    ShowStatusText
  6142.     MOVE.W    #50,WaitTime
  6143.     BSR    SetErrorPtrCol
  6144.     BRA    df_cleanup
  6145.  
  6146. df_noprot
  6147.     LEA    DiskFormatText,A0
  6148.     MOVE.W    #2581-7,D1
  6149.     MOVEQ    #11,D0
  6150.     BSR    ShowText3
  6151.     LEA    InProgressText,A0
  6152.     MOVE.W    #2821-7,D1
  6153.     MOVEQ    #11,D0
  6154.     BSR    ShowText3
  6155.     CLR.L    FmtDiskOffset
  6156.     MOVE.L    FormatDataPtr,FmtDataPtr
  6157.     MOVE.L    #$00001600,FmtDataSize
  6158.     BSR    ClearCylinder
  6159.     BSR    SetDiskPtrCol
  6160. df_formatloop
  6161.     LEA    FormattingCylText,A0
  6162.     BSR    ShowStatusText
  6163.     MOVE.W    CylinderNumber,D0
  6164.     LSR.W    #1,D0
  6165.     MOVE.W    D0,WordNumber
  6166.     BSR    Print2DecDigits
  6167.     MOVE.L    4.W,A6
  6168.     LEA    TrackdiskIOExtTD,A1
  6169.     MOVE.W    #TD_FORMAT,IO_COMMAND(A1)
  6170.     JSR    LVODoIO(A6)    ; Format cylinder
  6171.     LEA    VerifyingText,A0
  6172.     BSR    ShowStatusText
  6173.     MOVE.W    CylinderNumber,D0
  6174.     LSR.W    #1,D0
  6175.     MOVE.W    D0,WordNumber
  6176.     BSR    Print2DecDigits
  6177.     MOVE.L    4.W,A6
  6178.     LEA    TrackdiskIOExtTD,A1
  6179.     MOVE.W    #CMD_READ,IO_COMMAND(A1)
  6180.     JSR    LVODoIO(A6)    ; Read cylinder to verify
  6181.     TST.B    Fmt_hmmm
  6182.     BEQ.S    df_verifyok
  6183.     LEA    VerifyErrText(PC),A0
  6184.     BSR    ShowStatusText
  6185.     MOVE.W    #50,WaitTime
  6186.     BSR    SetErrorPtrCol
  6187.     BRA    df_cleanup
  6188.  
  6189. VerifyErrText    dc.b "Verify error!",0
  6190.  
  6191. df_verifyok
  6192.     ADD.L    #$1600,FmtDiskOffset
  6193.     ADDQ.W    #1,CylinderNumber
  6194.     CMP.W    #160,CylinderNumber
  6195.     BNE    df_formatloop
  6196.  
  6197.     LEA    InitDiskText,A0
  6198.     BSR    ShowStatusText
  6199.     BSR    ClearCylinder
  6200.     LEA    TrackdiskIOExtTD,A1
  6201.     CLR.L    IO_OFFSET(A1)
  6202.     MOVE.L    FormatDataPtr,A2
  6203.     MOVE.L    #$444F5300,(A2)       ; 'DOS',0
  6204.     MOVE.W    #880,10(A2)
  6205.     MOVE.L    #512,IO_LENGTH(A1)
  6206.     MOVE.W    #CMD_WRITE,IO_COMMAND(A1)
  6207.     MOVE.L    4.W,A6
  6208.     JSR    LVODoIO(A6)    ; Write bootblock
  6209.     MOVE.L    #DateStamp,D1
  6210.     MOVE.L    DOSbase,A6
  6211.     JSR    LVODateStamp(A6)
  6212.     MOVE.L    4.W,A6
  6213.     BSR    ClearCylinder
  6214.     MOVE.L    FormatDataPtr,A2
  6215.     MOVE.W    #2,2(A2)
  6216.     MOVE.W    #$0048,14(A2)
  6217.     MOVE.L    #$FFFFFFFF,$0138(A2)
  6218.     MOVE.W    #$0371,$013E(A2)
  6219.     MOVE.L    #$0553542D,$01B0(A2)
  6220.     MOVE.W    DiskNumText1,$01B4(A2)
  6221.     MOVE.W    #$06F7,$01E2(A2)
  6222.     MOVE.W    #1,$01FE(A2)
  6223.     LEA    DateStamp,A0
  6224.     MOVE.L    (A0),D0
  6225.     MOVE.L    D0,$01A4(A2)
  6226.     MOVE.L    D0,$01E4(A2)
  6227.     MOVE.L    4(A0),D0
  6228.     MOVE.L    D0,$01A8(A2)
  6229.     MOVE.L    D0,$01E8(A2)
  6230.     MOVE.L    8(A0),D0
  6231.     MOVE.L    D0,$01AC(A2)
  6232.     MOVE.L    D0,$01EC(A2)
  6233.     MOVE.L    A2,A3
  6234.     MOVE.L    A3,A4
  6235.     MOVEQ    #$7F,D1
  6236.     MOVEQ    #0,D0
  6237.     MOVE.L    D0,$0014(A4)
  6238. df_loop2
  6239.     SUB.L    (A3)+,D0
  6240.     DBRA    D1,df_loop2
  6241.     MOVE.L    D0,$0014(A4)
  6242.     MOVE.L    #$C000C037,$0200(A2)
  6243.     LEA    $0204(A2),A3
  6244.     MOVEQ    #$36,D0
  6245. df_loop3
  6246.     MOVE.L    #$FFFFFFFF,(A3)+
  6247.     DBRA    D0,df_loop3
  6248.     MOVE.W    #$3FFF,$0272(A2)
  6249.     MOVE.W    #$3FFF,$02DC(A2)
  6250.     LEA    TrackdiskIOExtTD,A1
  6251.     MOVE.L    #$0006E000,IO_OFFSET(A1)
  6252.     MOVE.L    #1024,IO_LENGTH(A1)
  6253.     MOVE.W    #CMD_WRITE,IO_COMMAND(A1)
  6254.     JSR    LVODoIO(A6)
  6255.     LEA    TrackdiskIOExtTD,A1
  6256.     MOVE.W    #CMD_UPDATE,IO_COMMAND(A1)
  6257.     JSR    LVODoIO(A6)    ; Flush write buffer
  6258. df_cleanup
  6259.     LEA    TrackdiskIOExtTD,A1
  6260.     MOVE.W    #TD_MOTOR,IO_COMMAND(A1)
  6261.     CLR.L    IO_LENGTH(A1)
  6262.     JSR    LVODoIO(A6)    ; Turn off the motor
  6263.     MOVE.L    Fmt_tja,A0
  6264.     MOVE.L    $0024(A0),A0
  6265.     OR.B    #2,$0040(A0)
  6266.     LEA    TrackdiskIOExtTD,A1
  6267.     MOVE.L    4.W,A6
  6268.     JSR    LVOCloseDevice(A6)
  6269.     LEA    TrackdiskPort,A1
  6270.     JSR    LVORemPort(A6)
  6271.     MOVE.L    FormatDataPtr,A1
  6272.     MOVE.L    #5632,D0
  6273.     JSR    LVOFreeMem(A6)
  6274.     CMP.W    #160,CylinderNumber
  6275.     BNE.S    df_skip2
  6276.     CMP.W    #'00',DiskNumText1
  6277.     BNE.S    df_skip2
  6278.     MOVE.L    DOSbase,A6
  6279.     MOVE.L    #100,D1    ; Wait 2 sec
  6280.     JSR    LVODelay(A6)
  6281.     MOVE.L    #FmtSongDirName,D1
  6282.     JSR    LVOCreateDir(A6)
  6283.     MOVE.L    D0,D1
  6284.     JSR    LVOUnlock(A6)
  6285.     MOVE.L    #FmtModuleDirName,D1
  6286.     JSR    LVOCreateDir(A6)
  6287.     MOVE.L    D0,D1
  6288.     JSR    LVOUnlock(A6)
  6289. df_skip2
  6290.     BSR    SetNormalPtrCol
  6291.     BSR    ShowAllRight
  6292.     BSR    ClearFileNames
  6293.     MOVE.W    #1,UpdateFreeMem
  6294.     RTS    
  6295.  
  6296. df_memerr
  6297.     BSR    OutOfMemErr
  6298.     BRA.S    df_skip2
  6299.  
  6300. ClearCylinder
  6301.     MOVE.L    FormatDataPtr,A0
  6302.     MOVE.W    #1407,D0
  6303.     MOVEQ    #0,D1
  6304. ccloop    MOVE.L    D1,(A0)+
  6305.     DBRA    D0,ccloop
  6306.     RTS    
  6307.  
  6308.  
  6309. ;---- Clear All Data ----
  6310.  
  6311. ClearAll
  6312.     ADD.L    #1,LaHeTx
  6313.     MOVE.B    DisableAnalyzer,SaveDA
  6314.     MOVE.B    ScopeEnable,SaveScope
  6315.     SF    ScopeEnable
  6316.     LEA    PleaseSelectText,A0
  6317.     BSR    ShowStatusText
  6318.     BSR    StorePtrCol
  6319.     BSR    SetWaitPtrCol
  6320.     BSR    Wait_4000
  6321.     CMP    #1,CurrScreen
  6322.     BNE.S    clbskip
  6323.     TST.B    DisableAnalyzer
  6324.     BNE.S    clbskip
  6325.     ST     DisableAnalyzer
  6326.     BSR    ClearAnaHeights
  6327.     BSR    ClearRightArea
  6328. clbskip    LEA    ClearBoxData,A1
  6329.     BSR    SwapBoxMem
  6330.     BSR    WaitForButtonUp
  6331.     BSR    Wait_4000
  6332. clearbuttoncheck
  6333.     BTST    #2,$DFF016
  6334.     BEQ    ClrCancel
  6335.     BSR    DoKeyBuffer
  6336.     MOVE.B    RawKeyCode,D0
  6337.     CMP.B    #33,D0 ; Pressed S
  6338.     BEQ    ClrSamples
  6339.     CMP.B    #24,D0 ; Pressed O
  6340.     BEQ    ClrSong
  6341.     CMP.B    #32,D0 ; Pressed A
  6342.     BEQ    ClrAll
  6343.     CMP.B    #51,D0 ; Pressed C
  6344.     BEQ    ClrCancel
  6345.     CMP.B    #69,D0 ; Pressed Esc
  6346.     BEQ    ClrCancel
  6347.     BTST    #6,$BFE001    ; Left Mousebutton
  6348.     BNE.S    clearbuttoncheck
  6349.     MOVEM.W    MouseX,D0/D1
  6350.     CMP.W    #166,D0
  6351.     BLO.S    clearbuttoncheck
  6352.     CMP.W    #257,D0
  6353.     BHI.S    clearbuttoncheck
  6354.     CMP.W    #58,D1
  6355.     BLO.S    clearbuttoncheck
  6356.     CMP.W    #84,D1
  6357.     BHI.S    clearbuttoncheck
  6358.     CMP.W    #204,D0
  6359.     BHS.S    samporcancel
  6360.     CMP.W    #198,D0
  6361.     BLS.S    songorall
  6362.     BRA.S    clearbuttoncheck
  6363.  
  6364. songorall
  6365.     CMP.W    #74,D1
  6366.     BHS.S    ClrAll
  6367.     CMP.W    #68,D1
  6368.     BLS    ClrSong
  6369.     BRA    clearbuttoncheck
  6370.  
  6371. samporcancel
  6372.     CMP.W    #74,D1
  6373.     BHS.S    ClrCancel
  6374.     CMP.W    #68,D1
  6375.     BLS.S    ClrSamples
  6376.     BRA    clearbuttoncheck
  6377.  
  6378. RemoveClearBox
  6379.     LEA    ClearBoxData,A1
  6380.     BSR    SwapBoxMem
  6381.     BSR    ShowAllRight
  6382.     BSR    ClearAnaHeights
  6383.     MOVE.B    SaveDA,DisableAnalyzer
  6384.     MOVE.B    SaveScope,ScopeEnable
  6385.     BSR    RestorePtrCol
  6386.     CLR.B    RawKeyCode
  6387.     RTS
  6388.  
  6389. ClrCancel
  6390.     BSR.S    RemoveClearBox
  6391.     BRA    SetErrorPtrCol
  6392.  
  6393. ClrAll    BSR    DoClearSong
  6394.     BSR    ClrSampleInfo
  6395.     BSR    SetNormalPtrCol
  6396.     BSR.S    RemoveClearBox
  6397.     BRA    DisplayMainAll
  6398.  
  6399. ClrSamples
  6400.     BSR.S    RemoveClearBox
  6401.     BSR    StopIt
  6402.     BSR    ClrSampleInfo
  6403.     BSR    SetNormalPtrCol
  6404.     SF    EdEnable
  6405.     MOVE.W    #1,InsNum
  6406.     BRA    DisplayMainAll
  6407.  
  6408. ClrSong    BSR.S    RemoveClearBox
  6409.     BSR    DoClearSong
  6410.     BSR    SetNormalPtrCol
  6411.     BRA    DisplayMainAll
  6412.  
  6413. ClrSampleInfo
  6414.     BSR    GiveBackInstrMem
  6415.     MOVE.L    SongDataPtr,A0
  6416.     LEA    sd_sampleinfo(A0),A0
  6417.     MOVE.W    #31*30-1,D0
  6418. csiloop    CLR.B    (A0)+
  6419.     DBRA    D0,csiloop
  6420.     MOVE.L    SongDataPtr,A1
  6421.     LEA    sd_sampleinfo(A1),A1
  6422.     MOVEQ    #30,D0
  6423. caloop2    MOVE.W    #1,28(A1)
  6424.     LEA    30(A1),A1
  6425.     DBRA    D0,caloop2
  6426.     LEA    SampleLengthAdd(PC),A3
  6427.     MOVEQ    #31,D0
  6428. csilop2    CLR.W    (A3)+
  6429.     DBRA    D0,csilop2
  6430.     JMP    RedrawSample
  6431.  
  6432. DoClearSong
  6433.     BSR    StopIt
  6434.     CLR.B    RawKeyCode
  6435.     MOVE.L    SongDataPtr,A0
  6436.     MOVE.L    A0,A1
  6437.     MOVEQ    #19,D0
  6438. docla2x    CLR.B    (A0)+
  6439.     DBRA    D0,docla2x
  6440.     MOVE.L    A1,A2
  6441.     ADD.L    #70716,A2
  6442.     ADD.L    #950,A1
  6443.     MOVEQ    #0,D0
  6444. caloop    MOVE.W    D0,(A1)+
  6445.     CMP.L    A1,A2
  6446.     BNE.S    caloop
  6447.     MOVE.L    SongDataPtr,A0
  6448.     MOVE.W    #$017F,sd_numofpatt(A0)
  6449.     MOVE.L    #'M.K.',sd_mahokakt(A0)  ; M.K. all the way...
  6450.     SF    EdEnable
  6451.     CLR.L    CurrPos
  6452.     CLR.L    SongPosition
  6453.     CLR.L    PatternPosition
  6454.     CLR.L    PatternPtr
  6455.     CLR.L    TimerTicks
  6456.     CLR.W    BlockMarkFlag
  6457.     CLR.B    MetroChannel
  6458.     MOVE.W    #1,EditMoveAdd
  6459.     MOVEQ    #0,D0
  6460.     MOVE.W    DefaultSpeed,D0
  6461.     MOVE.L    D0,CurrSpeed
  6462.     MOVE.W    Tempo,RealTempo
  6463.     BSR    SetTempo
  6464.     BSR    RestoreEffects2
  6465.     BSR    RestoreFKeyPos2
  6466.     BSR    UnmuteAll
  6467.     MOVE.W    #1,InsNum
  6468.     MOVE.L    #6,CurrSpeed
  6469.     CLR.L    PatternNumber
  6470.     CLR.W    ScrPattPos
  6471.     BSR    SetScrPatternPos
  6472.     BRA    RedrawPattern
  6473.  
  6474. UnmuteAll
  6475.     MOVE.W    #1,audchan1toggle
  6476.     MOVE.W    #1,audchan2toggle
  6477.     MOVE.W    #1,audchan3toggle
  6478.     MOVE.W    #1,audchan4toggle
  6479.     MOVE.W    #$000F,ActiveChannels
  6480.     BRA    RedrawToggles
  6481.  
  6482. ToggleMute
  6483.     CLR.B    RawKeyCode
  6484.     TST.W    ShiftKeyStatus
  6485.     BEQ    tomuskp
  6486.     CLR.W    audchan1toggle
  6487.     CLR.W    audchan2toggle
  6488.     CLR.W    audchan3toggle
  6489.     CLR.W    audchan4toggle
  6490. tomuskp    MOVEQ    #0,D0
  6491.     MOVE.W    PattCurPos,D0
  6492.     DIVU    #6,D0
  6493.     MULU    #11,D0
  6494.     ADDQ.W    #4,D0
  6495.     BRA    DoToggleMute
  6496.  
  6497. RestoreEffects
  6498.     MOVEQ    #0,D0
  6499.     MOVE.W    DefaultSpeed,D0
  6500.     MOVE.L    D0,CurrSpeed
  6501.     MOVE.W    Tempo,RealTempo
  6502.     BSR    SetTempo
  6503.     BSR.S    RestoreEffects2
  6504.     CLR.B    RawKeyCode
  6505.     LEA    EfxRestoredText(PC),A0
  6506.     BSR    ShowStatusText
  6507.     BSR    WaitALittle
  6508.     BRA    ShowAllRight
  6509.  
  6510. RestoreEffects2
  6511.     LEA    audchan1temp,A0
  6512.     BSR.S    reefsub
  6513.     LEA    audchan2temp,A0
  6514.     BSR.S    reefsub
  6515.     LEA    audchan3temp,A0
  6516.     BSR.S    reefsub
  6517.     LEA    audchan4temp,A0
  6518. reefsub    CLR.B    n_wavecontrol(A0)
  6519.     CLR.B    n_glissfunk(A0)
  6520.     CLR.B    n_finetune(A0)
  6521.     CLR.B    n_loopcount(A0)
  6522.     RTS
  6523.  
  6524. RestoreFKeyPos
  6525.     CLR.B    RawKeyCode
  6526.     LEA    PosRestoredText(PC),A0
  6527.     BSR    ShowStatusText
  6528.     BSR    WaitALittle
  6529.     BSR    ShowAllRight
  6530. RestoreFKeyPos2
  6531.     MOVE.W    #00,F6pos
  6532.     MOVE.W    #16,F7pos
  6533.     MOVE.W    #32,F8pos
  6534.     MOVE.W    #48,F9pos
  6535.     MOVE.W    #63,F10pos
  6536.     RTS
  6537.  
  6538. EfxRestoredText    dc.b 'efx restored !',0
  6539. PosRestoredText    dc.b 'pos restored !',0
  6540.  
  6541.  
  6542. GiveBackInstrMem
  6543.     MOVEQ    #1,D7
  6544.     MOVE.L    4.W,A6
  6545. gbimloop
  6546.     MOVE.W    D7,D2
  6547.     LSL.W    #2,D2
  6548.     LEA    SamplePtrs,A0
  6549.     MOVE.L    0(A0,D2.W),D1
  6550.     BEQ.S    gbimskip
  6551.     MOVE.L    124(A0,D2.W),D0
  6552.     CLR.L    0(A0,D2.W)
  6553.     CLR.L    124(A0,D2.W)
  6554.     MOVE.L    D1,A1
  6555.     JSR    LVOFreeMem(A6)
  6556. gbimskip
  6557.     ADDQ.W    #1,D7
  6558.     CMP.W    #32,D7
  6559.     BNE.S    gbimloop
  6560.     MOVE.W    #1,UpdateFreeMem
  6561.     JMP    FreeCopyBuf
  6562.  
  6563. ;---- Setup ----
  6564.  
  6565. Setup    CMP.W    #7,LastSetupScreen
  6566.     BEQ    Setup2
  6567.     CLR.W    LastSetupScreen
  6568.     BSR    WaitForButtonUp
  6569.     MOVE.W    #5,CurrScreen
  6570.     ST    DisableAnalyzer
  6571.     ST    NoSampleInfo
  6572.     BSR    Clear100Lines
  6573.     BSR    ShowSetupScreen
  6574.     BEQ    ExitSetup
  6575. RefreshSetup
  6576.     BSR    SetScreenColors
  6577.     BSR    Show_MS
  6578.     CMP.W    #5,CurrScreen
  6579.     BNE    Return1
  6580.     BSR    MarkColor
  6581.     BSR    ShowSetupToggles
  6582.     BSR    ShowSplit
  6583.     BSR    ShowPrintPath
  6584.     BSR    ShowKeyRepeat
  6585.     BSR    ShowExtCommand
  6586.     BSR    ShowMultiSetup
  6587.     BSR    ShowConfigNumber
  6588.     BRA    ShowAccidental ; Always last (redraws pattern) !
  6589.  
  6590. ShowSetupScreen
  6591.     MOVE.L    SetupMemPtr,D0
  6592.     BNE    DecompactSetup
  6593.     BSR.S    SaveMainPic
  6594.     TST.L    SetupMemPtr
  6595.     BEQ    Return1
  6596.     BRA    DecompactSetup
  6597.  
  6598. SaveMainPic
  6599.     MOVE.L    #8000,D0
  6600.     MOVEQ    #MEMF_PUBLIC,D1
  6601.     MOVE.L    4.W,A6
  6602.     JSR    LVOAllocMem(A6)
  6603.     MOVE.L    D0,SetupMemPtr
  6604.     BEQ    OutOfMemErr
  6605.     MOVE.L    D0,A1
  6606.     LEA    BitplaneData,A0
  6607.     MOVEQ    #1,D2
  6608. sssloop1
  6609.     MOVE.W    #999,D0
  6610. sssloop2
  6611.     MOVE.L    (A0)+,(A1)+
  6612.     DBRA    D0,sssloop2
  6613.     LEA    6240(A0),A0
  6614.     DBRA    D2,sssloop1
  6615.     RTS    
  6616.  
  6617. RestoreMainPic
  6618.     MOVE.L    SetupMemPtr,D0
  6619.     BEQ    Return1
  6620.     MOVE.L    D0,A1
  6621.     LEA    BitplaneData,A0
  6622.     MOVEQ    #1,D2
  6623. ssxloop1
  6624.     MOVE.W    #999,D0
  6625. ssxloop2
  6626.     MOVE.L    (A1)+,(A0)+
  6627.     DBRA    D0,ssxloop2
  6628.     LEA    6240(A0),A0
  6629.     DBRA    D2,ssxloop1
  6630.     MOVE.L    SetupMemPtr,A1
  6631.     CLR.L    SetupMemPtr
  6632.     MOVE.L    #8000,D0
  6633.     MOVE.L    4.W,A6
  6634.     JSR    LVOFreeMem(A6)
  6635.     RTS    
  6636.  
  6637. SetupMemPtr    dc.l 0
  6638.  
  6639. DecompactSetup2
  6640.     LEA    Setup2Data+4,A0
  6641.     MOVE.L    #Setup2Size-4-8,D0
  6642.     BRA.S    decoset
  6643.  
  6644. DecompactSetup
  6645.     LEA    SetupScreenData+4,A0
  6646.     MOVE.L    #SetupScreenSize-4-8,D0
  6647. decoset    LEA    BitplaneData,A1
  6648.     MOVE.L    A1,A2
  6649.     LEA    4000(A2),A2
  6650. dcsloop    MOVE.B    (A0)+,D1
  6651.     CMP.B    #181,D1
  6652.     BEQ.S    DecodeIt2
  6653.     MOVE.B    D1,(A1)+
  6654.     CMP.L    A2,A1
  6655.     BLO.S    dcslop2
  6656.     LEA    6240(A1),A1
  6657.     MOVE.L    #$FFFFFFFF,A2
  6658. dcslop2    SUBQ.L    #1,D0
  6659.     CMP.L    #0,D0
  6660.     BGT.S    dcsloop
  6661.     MOVEQ    #-1,D0
  6662.     RTS
  6663.  
  6664. DecodeIt2
  6665.     MOVEQ    #0,D1
  6666.     MOVE.B    (A0)+,D1
  6667.     MOVE.B    (A0)+,D2
  6668. dcdlop2    MOVE.B    D2,(A1)+
  6669.     CMP.L    A2,A1
  6670.     BLO.S    dcdskp2
  6671.     LEA    6240(A1),A1
  6672.     MOVE.L    #$FFFFFFFF,A2
  6673. dcdskp2    DBRA    D1,dcdlop2
  6674.     SUBQ.L    #2,D0
  6675.     BRA.S    dcslop2
  6676.  
  6677. ; Gadgets
  6678.  
  6679. CheckSetupGadgs
  6680.     TST.L    SplitAddress
  6681.     BEQ.S    csgskip
  6682.     CLR.L    SplitAddress
  6683.     BSR    ShowSplit
  6684. csgskip    MOVEM.W    MouseX2,D0/D1
  6685.     CMP.W    #210,D0
  6686.     BHS    SetupMenu3
  6687.     CMP.W    #108,D0
  6688.     BHS.S    SetupMenu2
  6689. ;---- Menu 1 ----
  6690.     CMP.W    #11,D1
  6691.     BLS    LoadConfig
  6692.     CMP.W    #22,D1
  6693.     BLS    SaveConfig
  6694.     CMP.W    #33,D1
  6695.     BLS    ResetAll
  6696.     CMP.W    #44,D1
  6697.     BLS    ExtCommand
  6698.     CMP.W    #55,D1
  6699.     BLS    MultiSetup
  6700.     CMP.W    #66,D1
  6701.     BLS    SetRed
  6702.     CMP.W    #77,D1
  6703.     BLS    SetGreen
  6704.     CMP.W    #88,D1
  6705.     BLS    SetBlue
  6706.     CMP.W    #99,D1
  6707.     BLS    ColorGadgets
  6708.     RTS
  6709.  
  6710. SetupMenu2
  6711.     CMP.W    #11,D1
  6712.     BLS    Return1
  6713.     CMP.W    #55,D1
  6714.     BLS    SetSplit
  6715.     CMP.W    #66,D1
  6716.     BLS    SetKeyRepeat
  6717.     CMP.W    #77,D1
  6718.     BLS    ToggleAccidental
  6719.     CMP.W    #88,D1
  6720.     BLS    PrintSong
  6721.     CMP.W    #99,D1
  6722.     BLS    EnterPrintPath
  6723.     RTS
  6724.  
  6725. SetupMenu3
  6726.     CMP.W    #11,D1
  6727.     BLS.S    ExitOrClear
  6728.     CMP.W    #22,D1
  6729.     BLS    ToggleSplit
  6730.     CMP.W    #33,D1
  6731.     BLS    ToggleFilter
  6732.     CMP.W    #44,D1
  6733.     BLS    ToggleTransDel
  6734.     CMP.W    #55,D1
  6735.     BLS    ToggleShowDec
  6736.     CMP.W    #66,D1
  6737.     BLS    ToggleAutoDir
  6738.     CMP.W    #77,D1
  6739.     BLS    ToggleAutoExit
  6740.     CMP.W    #88,D1
  6741.     BLS    ToggleModOnly
  6742.     CMP.W    #99,D1
  6743.     BLS    ToggleMIDI
  6744.     RTS
  6745.  
  6746. ExitOrClear
  6747.     CMP.W    #265,D0
  6748.     BLS    ClearSplit
  6749.     CMP.W    #306,D0
  6750.     BHS    Setup2
  6751. ExitSetup
  6752.     BSR    WaitForButtonUp
  6753.     MOVE.W    CurrScreen,LastSetupScreen
  6754.     CLR.B    RawKeyCode
  6755.     CLR.L    SplitAddress
  6756.     BSR    RestoreMainPic
  6757.     SF    NoSampleInfo
  6758.     BSR    SetupVUCols
  6759.     BSR    SetupAnaCols
  6760.     BSR    Clear100Lines
  6761.     BRA    DisplayMainAll
  6762.  
  6763. LastSetupScreen    dc.w 0
  6764.  
  6765. ToggleSplit
  6766.     EOR.B    #1,SplitFlag
  6767.     BRA    ShowSetupToggles
  6768.  
  6769. ToggleFilter
  6770.     BCHG    #1,$BFE001
  6771.     BRA    ShowSetupToggles
  6772.  
  6773. ToggleTransDel
  6774.     EOR.B    #1,TransDelFlag
  6775.     BRA.S    ShowSetupToggles
  6776.  
  6777. ToggleShowDec
  6778.     EOR.B    #1,ShowDecFlag
  6779.     MOVE.W    #1,UpdateFreeMem
  6780.     BRA.S    ShowSetupToggles
  6781.  
  6782. ToggleAutoDir
  6783.     EOR.B    #1,AutoDirFlag
  6784.     BRA.S    ShowSetupToggles
  6785.  
  6786. ToggleAutoExit
  6787.     EOR.B    #1,AutoExitFlag
  6788.     BRA.S    ShowSetupToggles
  6789.  
  6790. ToggleModOnly
  6791.     EOR.B    #1,ModOnlyFlag
  6792.     LEA    FileNamesPtr(PC),A0
  6793.     CLR.L    4(A0)
  6794.     BRA.S    ShowSetupToggles
  6795.  
  6796. ToggleMIDI
  6797.     EOR.B    #1,MIDIFlag
  6798.     BSR.S    ShowSetupToggles
  6799. tstmidi    TST.B    MIDIFlag
  6800.     BNE    OpenMIDI
  6801.     BRA    CloseMIDI
  6802.  
  6803. ClearSplit
  6804.     BSR    WaitForButtonUp
  6805.     LEA    ClearSplitText,A0
  6806.     BSR    AreYouSure
  6807.     BNE    Return1
  6808.     LEA    SplitData,A0
  6809.     MOVEQ    #15,D0
  6810. clsploop
  6811.     CLR.B    (A0)+
  6812.     DBRA    D0,clsploop
  6813.     BRA    ShowSplit
  6814.  
  6815. ShowSetupToggles
  6816.     CLR.B    RawKeyCode
  6817.     BSR    Show_MS
  6818.     CMP.W    #5,CurrScreen
  6819.     BNE    Return1
  6820.     MOVE.B    $BFE001,D0
  6821.     LSR.B    #1,D0
  6822.     AND.B    #1,D0
  6823.     EOR.B    #1,D0
  6824.     MOVE.B    D0,FilterFlag
  6825.     LEA    SplitFlag,A4
  6826.     MOVE.W    #3,TextLength
  6827.     MOVEQ    #7,D7
  6828.     MOVE.W    #636,D6
  6829. sstloop
  6830.     MOVE.W    D6,TextOffset
  6831.     LEA    ToggleOFFText(PC),A0
  6832.     TST.B    (A4)+
  6833.     BEQ.S    sstskip
  6834.     LEA    ToggleONText(PC),A0
  6835. sstskip
  6836.     BSR    ShowText2
  6837.     ADD.W    #440,D6
  6838.     DBRA    D7,sstloop
  6839.     BRA    WaitForButtonUp
  6840.  
  6841. ToggleONText2    dc.b ' '
  6842. ToggleONText    dc.b 'on '
  6843. ToggleOFFText    dc.b 'off '
  6844.  
  6845. ShowSplit
  6846.     BSR    CalculateSplit
  6847.     CMP.W    #5,CurrScreen
  6848.     BNE    Return1
  6849.     LEA    SplitData,A3
  6850.     MOVE.L    NoteNamesPtr,A4
  6851.     MOVEQ    #0,D5
  6852.     MOVE.W    #614,D6
  6853.     CLR.W    WordNumber
  6854. shsploop
  6855.     MOVE.W    D6,TextOffset
  6856.     MOVE.B    (A3,D5.W),WordNumber+1 ; instr
  6857.     BSR    PrintHexByte
  6858.     ADDQ.W    #4,D6
  6859.     MOVE.W    D6,D1
  6860.     MOVEQ    #0,D0
  6861.     MOVE.B    1(A3,D5.W),D0 ; note
  6862.     LSL.W    #2,D0
  6863.     LEA    (A4,D0.W),A0
  6864.     MOVEQ    #4,D0
  6865.     BSR    ShowText3
  6866.     ADDQ.L    #5,D6
  6867.     MOVE.W    D6,D1
  6868.     MOVEQ    #0,D0
  6869.     MOVE.B    2(A3,D5.W),D0 ; trans
  6870.     LSL.W    #2,D0
  6871.     LEA    (A4,D0.W),A0
  6872.     MOVEQ    #4,D0
  6873.     BSR    ShowText3
  6874.     ADD.W    #431,D6
  6875.     ADDQ.W    #4,D5
  6876.     CMP.W    #16,D5
  6877.     BNE.S    shsploop
  6878.     RTS
  6879.  
  6880. CalculateSplit
  6881.     LEA    SplitTransTable,A0
  6882.     LEA    SplitInstrTable,A1
  6883.     LEA    SplitData,A2
  6884.     MOVEQ    #0,D0
  6885. casploop
  6886.     MOVE.B    D0,(A0,D0.W)
  6887.     CLR.B    (A1,D0.W)
  6888.     ADDQ.W    #1,D0
  6889.     CMP.W    #37,D0
  6890.     BLS.S    casploop
  6891.  
  6892.     MOVE.B    1(A2),-(SP)
  6893.     MOVE.B    1+4(A2),-(SP)
  6894.     MOVE.B    1+8(A2),-(SP)
  6895.     MOVE.B    1+12(A2),-(SP) ; note
  6896.  
  6897.     MOVEQ    #3,D4
  6898. caspbigloop
  6899.     MOVEQ    #127,D0
  6900.     MOVEQ    #0,D1
  6901.     MOVEQ    #0,D2
  6902. casploop2
  6903.     CMP.B    1(A2,D1.W),D0 ; note
  6904.     BLS.S    caspskip
  6905.     MOVE.L    D1,D2
  6906.     MOVE.B    1(A2,D1.W),D0 ; note
  6907. caspskip
  6908.     ADDQ.W    #4,D1
  6909.     CMP.W    #16,D1
  6910.     BNE.S    casploop2
  6911.  
  6912.     MOVEQ    #0,D0
  6913.     MOVE.B    1(A2,D2.W),D0 ; note
  6914.     MOVE.B    #127,1(A2,D2.W) ; note
  6915.     MOVE.B    2(A2,D2.W),D1 ; trans
  6916. casploop3
  6917.     MOVE.B    D1,(A0,D0.W)
  6918.     MOVE.B    (A2,D2.W),(A1,D0.W) ; instr
  6919.     ADDQ.W    #1,D1
  6920.     CMP.W    #36,D1
  6921.     BLO.S    caspskip2
  6922.     MOVEQ    #35,D1
  6923. caspskip2
  6924.     ADDQ.W    #1,D0
  6925.     CMP.W    #36,D0
  6926.     BLO.S    casploop3
  6927.     DBRA    D4,caspbigloop
  6928.     
  6929.     MOVE.B    (SP)+,1+12(A2)
  6930.     MOVE.B    (SP)+,1+8(A2)
  6931.     MOVE.B    (SP)+,1+4(A2)
  6932.     MOVE.B    (SP)+,1(A2) ; note
  6933.     RTS
  6934.  
  6935. SetSplit
  6936.     LEA    SplitData,A2
  6937.     SUBQ.W    #1,D1
  6938.     DIVU    #11,D1
  6939.     SUBQ.W    #1,D1
  6940.     MOVE.W    D1,D7
  6941.     LSL.W    #2,D7
  6942.     MULU    #440,D1
  6943.     ADD.W    #600,D1
  6944.     CMP.W    #176,D0
  6945.     BHS.S    SetSplitTranspose
  6946.     CMP.W    #136,D0
  6947.     BHS.S    SetSplitNote
  6948.     ADD.W    #14,D1
  6949.     MOVE.W    D1,TextOffset
  6950.     BSR    GetHexByte
  6951.     CMP.B    #$1F,D0
  6952.     BLS.S    setskip
  6953.     MOVE.B    #$1F,D0
  6954. setskip    MOVE.B    D0,(A2,D7.W) ; instr
  6955.     BRA    ShowSplit
  6956.  
  6957. SetSplitNote
  6958.     MOVE.L    D1,-(SP)
  6959.     BSR    ShowSplit
  6960.     MOVE.L    (SP)+,D1
  6961.     ADD.W    #18,D1
  6962.     MOVEQ    #3,D0
  6963.     LEA    SpcNoteText,A0
  6964.     BSR    ShowText3
  6965.     LEA    1(A2,D7.W),A0 ; note
  6966.     MOVE.L    A0,SplitAddress
  6967.     BRA    WaitForButtonUp
  6968.  
  6969. SetSplitTranspose
  6970.     MOVE.L    D1,-(SP)
  6971.     BSR    ShowSplit
  6972.     MOVE.L    (SP)+,D1
  6973.     ADD.W    #23,D1
  6974.     MOVEQ    #3,D0
  6975.     LEA    SpcNoteText,A0
  6976.     BSR    ShowText3
  6977.     LEA    2(A2,D7.W),A0 ; trans
  6978.     MOVE.L    A0,SplitAddress
  6979.     BRA    WaitForButtonUp
  6980.  
  6981. SetKeyRepeat
  6982.     CMP.W    #188,D0
  6983.     BHS.S    skrep2
  6984.     MOVE.W    #2381,TextOffset
  6985.     BSR    GetHexByte
  6986.     MOVE.B    D0,KeyRepDelay+1
  6987.     BRA.S    ShowKeyRepeat
  6988. skrep2    MOVE.W    #2384,TextOffset
  6989.     BSR    GetHexByte
  6990.     MOVE.B    D0,KeyRepSpeed+1
  6991. ShowKeyRepeat
  6992.     MOVE.W    #2381,TextOffset
  6993.     MOVE.W    KeyRepDelay,WordNumber
  6994.     BSR    PrintHexByte
  6995.     ADDQ.W    #1,TextOffset
  6996.     MOVE.W    KeyRepSpeed,WordNumber
  6997.     BRA    PrintHexByte
  6998.  
  6999. ToggleAccidental
  7000.     MOVE.L    #NoteNames1,NoteNamesPtr
  7001.     EOR.B    #1,Accidental
  7002.     BEQ.S    ShowAccidental
  7003.     MOVE.L    #NoteNames2,NoteNamesPtr
  7004. ShowAccidental
  7005.     LEA    AccidentalText(PC),A0
  7006.     TST.B    Accidental
  7007.     BEQ.S    shacskp
  7008.     LEA    AccidentalText+1(PC),A0
  7009. shacskp    MOVEQ    #1,D0
  7010.     MOVE.W    #2824,D1
  7011.     BSR    ShowText3
  7012.     BRA    RedrawPattern
  7013.  
  7014. AccidentalText    dc.b '#¡'
  7015.  
  7016. LoadConfig
  7017.     CMP.W    #84,D0
  7018.     BHS    SetConfigNumber
  7019.     LEA    LoadConfigText,A0
  7020.     BSR    AreYouSure
  7021.     BNE    Return1
  7022.     BSR    WaitForButtonUp
  7023.     LEA    LoadingCfgText(PC),A0
  7024.     BSR    ShowStatusText
  7025. DoLoadConfig
  7026.     BSR    StorePtrCol
  7027.     BSR    PutConfigNumber
  7028.     MOVE.L    #Configname,D1
  7029.     MOVE.L    #1005,D2
  7030.     MOVE.L    DOSbase,A6
  7031.     JSR    LVOOpen(A6)
  7032.     MOVE.L    D0,D7
  7033.     BNE.S    cfgopok
  7034.     LEA    PTPath,A0
  7035.     BSR    CopyPath
  7036.     LEA    ConfigName(PC),A0
  7037.     MOVEQ    #12,D0
  7038. cfgnlop    MOVE.B    (A0)+,(A1)+
  7039.     DBRA    D0,cfgnlop
  7040.     MOVE.L    #FileName,D1
  7041.     MOVE.L    #1005,D2
  7042.     MOVE.L    DOSbase,A6
  7043.     JSR    LVOOpen(A6)
  7044.     MOVE.L    D0,D7
  7045.     BEQ.S    ConfigErr
  7046. cfgopok    BSR    SetDiskPtrCol
  7047.     MOVE.L    D7,D1
  7048.     CLR.L    ConfigID
  7049.     MOVE.L    #ConfigID,D2
  7050.     MOVE.L    #4,D3
  7051.     JSR    LVORead(A6)
  7052.     CMP.L    #"PT2.",ConfigID
  7053.     BNE.S    cfgerr2
  7054.     LEA    SetupData+4,A0
  7055.     MOVE.L    D7,D1
  7056.     MOVE.L    A0,D2
  7057.     MOVE.L    #ConfigFileSize-4,D3
  7058.     JSR    LVORead(A6)
  7059. lcfgend    MOVE.L    D7,D1
  7060.     JSR    LVOClose(A6)
  7061.     BSR    ShowAllRight
  7062.     BSR    RestorePtrCol
  7063.     BSR    CopyCfgData
  7064.     BSR    tstmidi
  7065.     BSR    ChangeCopList
  7066.     BRA    RefreshSetup
  7067.  
  7068. ConfigErr
  7069.     BSET    #2,InitError
  7070.     LEA    FileNotFoundText(PC),A0
  7071. cferr    BSR    ShowStatusText
  7072.     MOVE.W    #50,WaitTime
  7073.     BRA    ErrorRestoreCol
  7074.  
  7075. cfgerr2    BSR.S    ConfigErr2
  7076.     BRA.S    lcfgend
  7077.  
  7078. ConfigErr2
  7079.     BSET    #3,InitError
  7080.     LEA    NotAConfFileText(PC),A0
  7081.     BRA.S    cferr
  7082.  
  7083. ConfigErr3
  7084.     LEA    CantCreateFiText(PC),A0
  7085.     BRA.S    cferr
  7086.  
  7087. FileNotFoundText dc.b "config not found!",0
  7088. NotAConfFileText dc.b "not a config file",0
  7089. CantCreateFiText dc.b "can't create file",0
  7090.  
  7091. SaveConfig
  7092.     CMP.W    #84,D0
  7093.     BHS    SetConfigNumber
  7094.     LEA    SaveConfigText,A0
  7095.     BSR    AreYouSure
  7096.     BNE    Return1
  7097.     BSR    StorePtrCol
  7098.     BSR    SetDiskPtrCol
  7099.     BSR    PutConfigNumber
  7100.     LEA    SavingCfgText(PC),A0
  7101.     BSR    ShowStatusText
  7102.     MOVE.L    DOSbase,A6
  7103.     LEA    PTPath,A0
  7104.     BSR    CopyPath
  7105.     LEA    ConfigName(PC),A0
  7106.     MOVEQ    #12,D0
  7107. cfgllop    MOVE.B    (A0)+,(A1)+
  7108.     DBRA    D0,cfgllop
  7109.     MOVE.L    #FileName,D1
  7110.     MOVE.L    #1006,D2
  7111.     JSR    LVOOpen(A6)
  7112.     MOVE.L    D0,D7
  7113.     BEQ    ConfigErr3
  7114.     MOVE.L    D0,D1
  7115.     MOVE.L    #SetupData,D2
  7116.     MOVE.W    #ConfigFileSize,D3
  7117.     JSR    LVOWrite(A6)
  7118.     MOVE.L    D7,D1
  7119.     JSR    LVOClose(A6)
  7120.     BSR    ShowAllRight
  7121.     BRA    RestorePtrCol
  7122.  
  7123. SetConfigNumber
  7124.     MOVE.W    #611,TextOffset
  7125.     BSR    GetHexByte
  7126.     MOVE.W    D0,ConfigNumber
  7127. ShowConfigNumber
  7128.     MOVE.W    #611,TextOffset
  7129.     MOVE.W    ConfigNumber(PC),WordNumber
  7130.     BRA    PrintHexByte
  7131.  
  7132. PutConfigNumber
  7133.     MOVE.W    ConfigNumber(PC),D0
  7134.     LEA    ConfigName+12(PC),A0
  7135.     BRA    IntToHex2
  7136.  
  7137. ConfigName    dc.b 'PT.config-00',0,0
  7138. ConfigNumber    dc.w 0
  7139. LoadingCfgText    dc.b 'loading config',0
  7140. SavingCfgText    dc.b 'saving config',0,0
  7141. ConfigID    dc.l 0
  7142.  
  7143. ResetAll
  7144.     LEA    ResetAllText,A0
  7145.     BSR    AreYouSure
  7146.     BNE    Return1
  7147. DoResetAll
  7148.     LEA    DefaultSetupData,A0
  7149.     LEA    SetupData,A1
  7150.     MOVE.W    #ConfigFileSize-1,D0
  7151. rsaloop    MOVE.B    (A0)+,(A1)+
  7152.     DBRA    D0,rsaloop
  7153.     BRA    RefreshSetup
  7154.  
  7155. ExtCommand
  7156.     CMP.W    #11,D0
  7157.     BLO.S    excolab
  7158.     BSR    StorePtrCol
  7159.     BSR    SetWaitPtrCol
  7160.     LEA    ExtCommands,A6
  7161.     MOVE.W    ExtCmdNumber,D1
  7162.     MULU    #32,D1
  7163.     ADD.L    D1,A6
  7164.     MOVE.L    A6,ShowTextPtr
  7165.     MOVE.L    A6,TextEndPtr
  7166.     ADD.L    #31,TextEndPtr
  7167.     MOVE.W    #11,TextLength
  7168.     MOVE.W    #1482,A4
  7169.     BSR    GetTextLine
  7170.     BRA    RestorePtrCol
  7171.  
  7172. ShowExtCommand
  7173.     LEA    ExtCommands,A0
  7174.     MOVE.W    ExtCmdNumber,D1
  7175.     MULU    #32,D1
  7176.     ADD.L    D1,A0
  7177.     MOVEQ    #11,D0
  7178.     MOVE.W    #1482,D1
  7179.     BRA    ShowText3
  7180.  
  7181. excolab    BTST    #2,$DFF016
  7182.     BEQ.S    excorun
  7183.     ADDQ.W    #1,ExtCmdNumber
  7184.     AND.W    #7,ExtCmdNumber
  7185.     BSR.S    ShowExtCommand
  7186.     BSR    Wait_4000
  7187.     BSR    Wait_4000
  7188.     BSR    Wait_4000
  7189.     BRA    Wait_4000
  7190.  
  7191. excorun    LEA    ExtCommands,A0
  7192.     MOVE.W    ExtCmdNumber,D1
  7193.     MULU    #32,D1
  7194.     ADD.L    D1,A0
  7195.     TST.B    (A0)
  7196.     BEQ    Return1
  7197.     MOVE.L    A0,ExtCmdAddress
  7198.     MOVE.L    IntuitionBase,A6
  7199.     JSR    LVOOpenWorkbench(A6)
  7200.     JSR    LVOWBenchToFront(A6)
  7201.     MOVE.L    #ExtCmdConsole,D1
  7202.     MOVE.L    #1005,D2
  7203.     MOVE.L    DOSBase,A6
  7204.     JSR    LVOOpen(A6)
  7205.     MOVE.L    D0,ExtCmdWindow
  7206.     BEQ.S    winderr
  7207.     LSL.L    #2,D0
  7208.     MOVE.L    D0,A0
  7209.     MOVE.L    PTProcess,A1
  7210.     MOVE.L    8(A0),$A4(A1)
  7211.     BSR    GotoCLI
  7212.     MOVE.L    ExtCmdWindow,D1
  7213.     BEQ    Return1
  7214.     MOVE.L    DOSBase,A6
  7215.     JSR    LVOClose(A6)
  7216.     CLR.L    ExtCmdWindow
  7217.     RTS
  7218.  
  7219. winderr    LEA    ConsoleErrText,A0
  7220.     BSR    ShowStatusText
  7221.     BRA    SetErrorPtrCol
  7222.  
  7223. ExtCmdNumber    dc.w 0
  7224. ExtCmdAddress    dc.l 0
  7225. ExtCmdWindow    dc.l 0
  7226. ExtCmdConsole    dc.b "CON:0/0/640/150/Protracker Output Window",0
  7227. ConsoleErrText    dc.b "Can't open window",0,0
  7228.  
  7229. MultiSetup
  7230.     CMP.W    #44,D0
  7231.     BLO    Return1
  7232.     BSR    StorePtrCol
  7233.     BSR    SetWaitPtrCol
  7234.     MOVE.W    #1,GetLineFlag
  7235.     SUB.W    #44,D0
  7236.     LSR.W    #4,D0
  7237.     MOVE.B    D0,musepos
  7238. museset    MOVEQ    #0,D0
  7239.     MOVE.B    musepos,D0
  7240.     MOVE.L    D0,D1
  7241.     LSL.W    #4,D1
  7242.     MOVE.W    #52,LineCurX
  7243.     MOVE.W    #53,LineCurY
  7244.     ADD.W    D1,LineCurX
  7245.     LEA    MultiModeNext,A1
  7246.     LEA    (A1,D0.W),A1
  7247.     BSR    UpdateLineCurPos
  7248. muselop    BSR    GetHexKey
  7249.     TST.B    D1
  7250.     BEQ.S    musenul
  7251.     CMP.B    #4,D1
  7252.     BHI.S    muselop
  7253.     MOVE.B    D1,(A1)
  7254.     BSR    ShowMultiSetup
  7255.     MOVEQ    #1,D0
  7256. musenul    TST.B    D0
  7257.     BEQ.S    museabo
  7258.     ADD.B    D0,musepos
  7259.     AND.B    #3,musepos
  7260.     BSR    Wait_4000
  7261.     BSR    Wait_4000
  7262.     BSR    Wait_4000
  7263.     BRA.S    museset
  7264.  
  7265. museabo    BSR    RestorePtrCol
  7266.     CLR.W    GetLineFlag
  7267.     MOVE.W    #0,LineCurX
  7268.     MOVE.W    #270,LineCurY
  7269.     BSR    UpdateLineCurPos
  7270. ShowMultiSetup
  7271.     MOVE.W    #1926,TextOffset
  7272.     MOVE.B    MultiModeNext,D0
  7273.     BSR    PrintHexDigit
  7274.     MOVE.W    #1928,TextOffset
  7275.     MOVE.B    MultiModeNext+1,D0
  7276.     BSR    PrintHexDigit
  7277.     MOVE.W    #1930,TextOffset
  7278.     MOVE.B    MultiModeNext+2,D0
  7279.     BSR    PrintHexDigit
  7280.     MOVE.W    #1932,TextOffset
  7281.     MOVE.B    MultiModeNext+3,D0
  7282.     BRA    PrintHexDigit
  7283.  
  7284. musepos    dc.b 0,0
  7285.  
  7286. SetRed    CMP.W    #82,D0
  7287.     BHS    SelectColor
  7288. setr2    BSR    GetColPos
  7289.     AND.W    #$0F00,D2
  7290.     LSR.W    #8,D2
  7291.     CMP.B    D2,D0
  7292.     BEQ.S    setrskp
  7293.     AND.W    #$00FF,D1
  7294.     LSL.W    #8,D0
  7295.     OR.W    D0,D1
  7296.     MOVE.W    D1,(A0)
  7297.     BSR    ShowColSliders
  7298.     BSR    SetScreenColors
  7299. setrskp    BTST    #6,$BFE001
  7300.     BEQ.S    setr2
  7301.     RTS
  7302.  
  7303. SetGreen
  7304.     CMP.W    #82,D0
  7305.     BHS    SelectColor
  7306. setg2    BSR.S    GetColPos
  7307.     AND.W    #$00F0,D2
  7308.     LSR.W    #4,D2
  7309.     CMP.B    D2,D0
  7310.     BEQ.S    setgskp
  7311.     AND.W    #$0F0F,D1
  7312.     LSL.W    #4,D0
  7313.     OR.W    D0,D1
  7314.     MOVE.W    D1,(A0)
  7315.     BSR    ShowColSliders
  7316.     BSR    SetScreenColors
  7317. setgskp    BTST    #6,$BFE001
  7318.     BEQ.S    setg2
  7319.     RTS
  7320.  
  7321. SetBlue    CMP.W    #82,D0
  7322.     BHS    SelectColor
  7323. setb2    BSR.S    GetColPos
  7324.     AND.W    #$000F,D2
  7325.     CMP.B    D2,D0
  7326.     BEQ.S    setbskp
  7327.     AND.W    #$0FF0,D1
  7328.     OR.W    D0,D1
  7329.     MOVE.W    D1,(A0)
  7330.     BSR    ShowColSliders
  7331.     BSR    SetScreenColors
  7332. setbskp    BTST    #6,$BFE001
  7333.     BEQ.S    setb2
  7334.     RTS
  7335.  
  7336. GetColPos
  7337.     MOVEQ    #0,D0
  7338.     MOVE.W    MouseX,D0
  7339.     CMP.W    #26,D0
  7340.     BHS.S    gcpskp2
  7341.     MOVEQ    #0,D0
  7342.     BRA.S    gcpskip
  7343. gcpskp2    SUB.W    #26,D0
  7344.     DIVU    #3,D0
  7345.     AND.L    #$FF,D0
  7346.     CMP.W    #15,D0
  7347.     BLS.S    gcpskip
  7348.     MOVEQ    #15,D0
  7349. gcpskip    CMP.W    #7,CurrScreen
  7350.     BEQ    GetColAddr
  7351.     LEA    ColorTable,A0
  7352.     MOVE.W    CurrColor,D1
  7353.     ADD.W    D1,D1
  7354.     LEA    (A0,D1.W),A0
  7355.     MOVE.W    (A0),D1
  7356.     MOVE.W    D1,D2
  7357.     RTS
  7358.  
  7359. ShowColSliders
  7360.     LEA    ColSliders(PC),A2
  7361.     MOVE.L    TextBplPtr,A1
  7362.     ADD.L    #3282,A1
  7363.     BSR.S    gcpskip
  7364.     AND.W    #$000F,D1
  7365.     BSR.S    ShowOneSlider
  7366.     MOVE.L    TextBplPtr,A1
  7367.     ADD.L    #2842,A1
  7368.     BSR.S    gcpskip
  7369.     AND.W    #$00F0,D1
  7370.     LSR.W    #4,D1
  7371.     BSR.S    ShowOneSlider
  7372.     MOVE.L    TextBplPtr,A1
  7373.     ADD.L    #2402,A1
  7374.     BSR.S    gcpskip
  7375.     AND.W    #$0F00,D1
  7376.     LSR.W    #8,D1
  7377. ShowOneSlider
  7378.     CLR.L    (A1)
  7379.     CLR.L    4(A1)
  7380.     CLR.L    40(A1)
  7381.     CLR.L    44(A1)
  7382.     CLR.L    80(A1)
  7383.     CLR.L    84(A1)
  7384.     MOVE.W    D1,D3
  7385.     ADD.W    D3,D3
  7386.     ADD.W    D3,D3
  7387.     MOVE.W    2(A2,D3.W),D4
  7388.     MOVE.B    0(A2,D3.W),00(A1,D4.W)
  7389.     MOVE.B    1(A2,D3.W),01(A1,D4.W)
  7390.     MOVE.B    0(A2,D3.W),40(A1,D4.W)
  7391.     MOVE.B    1(A2,D3.W),41(A1,D4.W)
  7392.     MOVE.B    0(A2,D3.W),80(A1,D4.W)
  7393.     MOVE.B    1(A2,D3.W),81(A1,D4.W)
  7394.     RTS
  7395.  
  7396. ColSliders
  7397.     dc.w %0000000001111100,0
  7398.     dc.w %0000111110000000,1
  7399.     dc.w %0000000111110000,1
  7400.     dc.w %0000000000111110,1
  7401.     dc.w %0000011111000000,2
  7402.     dc.w %0000000011111000,2
  7403.     dc.w %0000000000011111,2
  7404.     dc.w %0000001111100000,3
  7405.     dc.w %0000000001111100,3
  7406.     dc.w %0000111110000000,4
  7407.     dc.w %0000000111110000,4
  7408.     dc.w %0000000000111110,4
  7409.     dc.w %0000011111000000,5
  7410.     dc.w %0000000011111000,5
  7411.     dc.w %0000000000011111,5
  7412.     dc.w %0000001111100000,6
  7413.  
  7414. SelectColor
  7415.     CMP.W    #84,D1
  7416.     BHS    Return1
  7417.     MOVE.L    TextBplPtr,A0
  7418.     LEA    2410(A0),A0
  7419.     MOVEQ    #24,D2
  7420. slcloop    CLR.L    (A0)
  7421.     LEA    40(A0),A0
  7422.     DBRA    D2,slcloop
  7423.  
  7424.     SUB.W    #82,D0
  7425.     DIVU    #13,D0
  7426.     SUB.W    #60,D1
  7427.     DIVU    #6,D1
  7428.     MOVE.W    D0,D2
  7429.     LSL.W    #2,D2
  7430.     ADD.W    D1,D2
  7431.     MOVE.W    D2,CurrColor
  7432. MarkColor
  7433.     BSR    gcpskip
  7434.     MOVE.L    A0,UndoColAddr
  7435.     MOVE.W    D1,UndoCol
  7436.     BSR    ShowColSliders
  7437.     BSR.S    BlockColors
  7438.     MOVE.W    CurrColor,D0
  7439.     MOVE.W    D0,D1
  7440.     AND.W    #$0003,D1
  7441.     MULU    #6*40,D1
  7442.     MOVE.L    TextBplPtr,A0
  7443.     ADD.L    D1,A0
  7444.     LEA    2410(A0),A0
  7445.     BTST    #2,D0
  7446.     BNE.S    slcskip
  7447.     MOVE.W    #$3FF0,(A0)
  7448.     MOVE.W    #$3FF0,240(A0)
  7449.     MOVEQ    #4,D0
  7450. slclop2    LEA    40(A0),A0
  7451.     MOVE.W    #$2010,(A0)
  7452.     DBRA    D0,slclop2
  7453.     BRA    WaitForButtonUp
  7454.  
  7455. slcskip    MOVE.L    #$0001FF80,(A0)
  7456.     MOVE.L    #$0001FF80,240(A0)
  7457.     MOVEQ    #4,D0
  7458. slclop3    LEA    40(A0),A0
  7459.     MOVE.L    #$0001FF80,(A0)
  7460.     DBRA    D0,slclop3
  7461.     BRA    WaitForButtonUp
  7462.  
  7463. BlockColors
  7464.     MOVE.L    TextBplPtr,A0
  7465.     LEA    2452(A0),A0
  7466.     MOVEQ    #3,D1
  7467. suploop2
  7468.     MOVEQ    #4,D0
  7469. suploop3
  7470.     MOVE.B    #$FF,(A0)
  7471.     ADD.L    #40,A0
  7472.     DBRA    D0,suploop3
  7473.     ADD.L    #40,A0
  7474.     DBRA    D1,suploop2
  7475.     RTS
  7476.  
  7477. ColorGadgets
  7478.     CMP.W    #79,D0
  7479.     BHS    SetDefaultCol
  7480.     CMP.W    #33,D0
  7481.     BHS.S    CancelCol
  7482.     MOVE.L    UndoColAddr,A0
  7483.     MOVE.W    UndoCol,D0
  7484.     MOVE.W    (A0),UndoCol
  7485.     MOVE.W    D0,(A0)
  7486.     BSR    ShowColSliders
  7487.     BRA    SetScreenColors
  7488.  
  7489. CancelCol
  7490.     LEA    CanCols(PC),A0
  7491.     LEA    ColorTable,A1
  7492.     MOVEQ    #7,D0
  7493. cacolop    MOVE.W    (A0)+,(A1)+
  7494.     DBRA    D0,cacolop
  7495.     BSR    ShowColSliders
  7496.     BRA    SetScreenColors
  7497.  
  7498. CopyCfgData
  7499.     LEA    ColorTable,A0
  7500.     LEA    CanCols(PC),A1
  7501.     MOVEQ    #7,D0
  7502. cocclop    MOVE.W    (A0)+,(A1)+
  7503.     DBRA    D0,cocclop
  7504.     LEA    ModulesPath2,A0
  7505.     MOVE.W    #195,D0
  7506. cocclp2    CLR.B    (A0)+
  7507.     DBRA    D0,cocclp2
  7508.     LEA    ModulesPath,A0
  7509.     LEA    ModulesPath2,A1
  7510.     BSR.S    cocclp3
  7511.     LEA    SongsPath,A0
  7512.     LEA    SongsPath2,A1
  7513.     BSR.S    cocclp3
  7514.     LEA    SamplePath,A0
  7515.     LEA    SamplePath2,A1
  7516. cocclp3    MOVE.B    (A0)+,(A1)+
  7517.     BNE.S    cocclp3
  7518.     LEA    VUMeterColors,A0
  7519.     LEA    SaveColors,A1
  7520.     MOVEQ    #40+48-1,D0
  7521. cocclp4    MOVE.W    (A0)+,(A1)+
  7522.     DBRA    D0,cocclp4
  7523.     RTS
  7524.  
  7525. UndoCol        dc.w 0
  7526. UndoColAddr    dc.l 0
  7527. CanCols        dc.w 0,0,0,0,0,0,0,0
  7528.  
  7529. SetDefaultCol
  7530.     LEA    DefCol,A0
  7531.     LEA    ColorTable,A1
  7532.     MOVEQ    #7,D0
  7533. sdcloop    MOVE.W    (A0)+,(A1)+
  7534.     DBRA    D0,sdcloop
  7535.     BSR    ShowColSliders
  7536. SetScreenColors
  7537.     BSR    SetupAnaCols
  7538. SetScreenColors2
  7539.     LEA    ColorTable,A0
  7540.     LEA    CopCol0,A1
  7541.     MOVE.W    (A0),(A1)
  7542.     MOVE.W    2(A0),4(A1)
  7543.     MOVE.W    4(A0),8(A1)
  7544.     MOVE.W    6(A0),12(A1)
  7545.     MOVE.W    8(A0),16(A1)
  7546.     MOVE.W    10(A0),20(A1)
  7547.     MOVE.W    12(A0),24(A1)
  7548.     MOVE.W    14(A0),28(A1)
  7549.     MOVE.W    14(A0),D0
  7550.     TST.W    SamScrEnable
  7551.     BEQ.S    sscnosc
  7552.     MOVE.W    8(A0),D0
  7553. sscnosc    MOVE.W    D0,NoteCol
  7554.     MOVE.W    10(A0),D0
  7555.     MOVE.W    D0,D4
  7556.     MOVE.W    #3,FadeX
  7557.     BSR.S    FadeCol
  7558.     MOVE.W    D0,32(A1)
  7559.     MOVE.W    D4,36(A1)
  7560.     MOVE.W    D4,D0
  7561.     MOVE.W    #-3,FadeX
  7562.     BSR.S    FadeCol
  7563.     MOVE.W    D0,40(A1)
  7564.     RTS
  7565.  
  7566. FadeCol    MOVE.W    D0,D1
  7567.     MOVE.W    D0,D2
  7568.     MOVE.W    D0,D3
  7569.     LSR.W    #8,D1
  7570.     ADD.W    FadeX(PC),D1
  7571.     BPL.S    redskp
  7572.     MOVEQ    #0,D1
  7573. redskp    CMP.W    #15,D1
  7574.     BLS.S    redskp2
  7575.     MOVEQ    #15,D1
  7576. redskp2    AND.W    #$00F0,D2
  7577.     LSR.W    #4,D2
  7578.     ADD.W    FadeX(PC),D2
  7579.     BPL.S    grnskp
  7580.     MOVEQ    #0,D2
  7581. grnskp    CMP.W    #15,D2
  7582.     BLS.S    grnskp2
  7583.     MOVEQ    #15,D2
  7584. grnskp2    AND.W    #$000F,D3
  7585.     ADD.W    FadeX(PC),D3
  7586.     BPL.S    bluskp
  7587.     MOVEQ    #0,D3
  7588. bluskp    CMP.W    #15,D3
  7589.     BLS.S    bluskp2
  7590.     MOVEQ    #15,D3
  7591. bluskp2    MOVE.W    D3,D0
  7592.     LSL.W    #4,D2
  7593.     OR.W    D2,D0
  7594.     LSL.W    #8,D1
  7595.     OR.W    D1,D0
  7596.     RTS
  7597.  
  7598. CurrColor    dc.w    0
  7599. FadeX        dc.w    -3
  7600.  
  7601. EnterPrintPath
  7602.     BSR    StorePtrCol
  7603.     BSR    SetWaitPtrCol
  7604.     LEA    PrintPath,A6
  7605.     MOVE.L    A6,ShowTextPtr
  7606.     MOVE.L    A6,TextEndPtr
  7607.     ADD.L    #31,TextEndPtr
  7608.     MOVE.W    #12,TextLength
  7609.     MOVE.W    #3694,A4
  7610.     BSR    GetTextLine
  7611.     BRA    RestorePtrCol
  7612.  
  7613. ShowPrintPath
  7614.     LEA    PrintPath,A0
  7615.     MOVE.W    #3694,D1
  7616.     MOVEQ    #12,D0
  7617.     BRA    ShowText3
  7618.  
  7619. ; Print Song
  7620.  
  7621. PrintSong
  7622.     LEA    PrintSongText,A0
  7623.     BSR    AreYouSure
  7624.     BNE    Return1
  7625.     BSR    StorePtrCol
  7626.     MOVE.L    #PrintPath,D1
  7627.     MOVE.L    #1006,D2
  7628.     MOVE.L    DOSbase,A6
  7629.     JSR    LVOOpen(A6)
  7630.     MOVE.L    D0,FileHandle
  7631.     BEQ    CantOpenFile
  7632.     BSR    SetDiskPtrCol
  7633.     LEA    PrintingSongText,A0
  7634.     BSR    ShowStatusText
  7635.     MOVE.L    FileHandle,D1
  7636.     MOVE.L    #SongDumpText,D2
  7637.     MOVEQ    #68,D3
  7638.     MOVE.L    DOSbase,A6
  7639.     JSR    LVOWrite(A6)
  7640.     MOVE.L    FileHandle,D1
  7641.     MOVE.L    SongDataPtr,D2
  7642.     MOVEQ    #20,D3
  7643.     JSR    LVOWrite(A6)
  7644.     BSR    PrintCRLF
  7645.     BSR    PrintCRLF
  7646.     BSR    PrintSong2
  7647.     BSR    PrintCRLF
  7648.     BSR    PrintSong4
  7649.     BSR    PrintFormFeed
  7650.     MOVE.L    SongDataPtr,A0
  7651.     MOVEQ    #0,D0
  7652.     MOVE.B    sd_numofpatt(A0),D0
  7653.     LEA    sd_pattpos(A0),A0
  7654.     MOVEQ    #0,D7
  7655. ps_loop    CMP.B    (A0,D0.W),D7
  7656.     BGT.S    ps_skip
  7657.     MOVE.B    (A0,D0.W),D7
  7658. ps_skip    SUBQ.W    #1,D0
  7659.     BPL.S    ps_loop
  7660.     MOVEQ    #0,D1
  7661. ps_loop2
  7662.     MOVEM.L    D1-D7/A0-A6,-(SP)
  7663.     BSR    PrintPattern
  7664.     MOVEM.L    (SP)+,D1-D7/A0-A6
  7665.     TST.L    D0
  7666.     BNE.S    ps_skip2
  7667.     MOVEM.L    D1/D7,-(SP)
  7668.     BSR    PrintFormFeed
  7669.     MOVEM.L    (SP)+,D1/D7
  7670.     ADDQ.W    #1,D1
  7671.     CMP.W    D7,D1
  7672.     BLO.S    ps_loop2
  7673. ps_skip2
  7674.     MOVE.L    DOSbase,A6
  7675.     MOVE.L    FileHandle,D1
  7676.     JSR    LVOClose(A6)
  7677.     BSR    ShowAllRight
  7678.     BRA    RestorePtrCol
  7679.  
  7680. PrintSong2
  7681.     MOVEQ    #1,D7
  7682. ps2_2    MOVE.L    D7,D0
  7683.     LSR.B    #4,D0
  7684.     CMP.B    #9,D0
  7685.     BLS.S    spujk
  7686.     ADDQ.B    #7,D0
  7687. spujk    ADD.B    #'0',D0
  7688.     MOVE.B    D0,PattXText1
  7689.     MOVE.B    D7,D0
  7690.     AND.B    #$0F,D0
  7691.     CMP.B    #9,D0
  7692.     BLS.S    spujk2
  7693.     ADDQ.B    #7,D0
  7694. spujk2    ADD.B    #'0',D0
  7695.     MOVE.B    D0,PattXText2
  7696.  
  7697.     MOVE.L    SongDataPtr,A0
  7698.     MOVE.W    D7,D0
  7699.     MULU    #30,D0
  7700.     LEA    -10(A0,D0.W),A0
  7701.     LEA    PpText,A1
  7702.     MOVEQ    #21,D0
  7703. ps2_loop
  7704.     MOVE.B    #' ',(A1)+
  7705.     DBRA    D0,ps2_loop
  7706.     LEA    PpText,A1
  7707.  
  7708.     MOVE.L    A0,SavIt
  7709. ps2_loop2
  7710.     MOVE.B    (A0)+,D0
  7711.     BEQ    PrintSong3
  7712.     MOVE.B    D0,(A1)+
  7713.     BRA.S    ps2_loop2
  7714.  
  7715. SavIt    dc.l    0
  7716.  
  7717. PrintSong3
  7718.     MOVE.L    D7,-(SP) ; pattnum
  7719.     MOVE.L    SavIt(PC),A0
  7720.     MOVE.W    22(A0),D0
  7721.     ADD.W    D0,D0
  7722.     LEA    Prafs+2+4,A0
  7723.     BSR    IntToHexASCII
  7724.     MOVE.L    SavIt(PC),A0
  7725.     MOVE.W    26(A0),D0
  7726.     ADD.W    D0,D0
  7727.     LEA    Prafs+8+4,A0
  7728.     BSR    IntToHexASCII
  7729.     MOVE.L    SavIt(PC),A0
  7730.     MOVE.W    28(A0),D0
  7731.     ADD.W    D0,D0
  7732.     LEA    Prafs+14+4,A0
  7733.     BSR    IntToHexASCII
  7734.     MOVE.L    DOSbase,A6
  7735.     MOVE.L    FileHandle,D1
  7736.     MOVE.L    #PtotText,D2
  7737.     MOVEQ    #52,D3
  7738.     JSR    LVOWrite(A6)
  7739.     MOVE.L    (SP)+,D7
  7740.     ADDQ.W    #1,D7
  7741.     CMP.W    #$0020,D7
  7742.     BNE    ps2_2
  7743.     RTS
  7744.  
  7745. PrintSong4
  7746.     MOVE.L    SongDataPtr,A0
  7747.     MOVEQ    #0,D7
  7748.     MOVE.B    sd_numofpatt(A0),D7
  7749.     LEA    sd_pattpos(A0),A0
  7750.     MOVEQ    #0,D5
  7751. ps4_loop1
  7752.     MOVEQ    #0,D6
  7753. ps4_loop2
  7754.     MOVEQ    #0,D0
  7755.     MOVE.B    (A0)+,D0
  7756.     MOVE.W    D0,D1
  7757.     LSR.W    #4,D1
  7758.     ADD.B    #$30,D1
  7759.     CMP.B    #$39,D1
  7760.     BLS.S    ps4_skip
  7761.     ADDQ.B    #7,D1
  7762. ps4_skip
  7763.     AND.B    #15,D0
  7764.     ADD.B    #$30,D0
  7765.     CMP.B    #$39,D0
  7766.     BLS.S    ps4_skip2
  7767.     ADDQ.B    #7,D0
  7768. ps4_skip2
  7769.     LEA    PnText,A1
  7770.     MOVE.B    D1,(A1)+
  7771.     MOVE.B    D0,(A1)
  7772.     MOVEM.L    D5-D7/A0,-(SP)
  7773.     MOVE.L    DOSbase,A6
  7774.     MOVE.L    FileHandle,D1
  7775.     MOVE.L    #PnText,D2
  7776.     MOVEQ    #4,D3
  7777.     JSR    LVOWrite(A6)
  7778.     MOVEM.L    (SP)+,D5-D7/A0
  7779.     ADDQ.W    #1,D5
  7780.     CMP.W    D5,D7
  7781.     BEQ    Return1
  7782.     ADDQ.W    #1,D6
  7783.     CMP.W    #$0010,D6
  7784.     BNE.S    ps4_loop2
  7785.     MOVEM.L    D5-D7/A0,-(SP)
  7786.     BSR.S    PrintCRLF
  7787.     MOVEM.L    (SP)+,D5-D7/A0
  7788.     BRA.S    ps4_loop1
  7789.  
  7790. PrintCRLF
  7791.     MOVE.L    DOSbase,A6
  7792.     MOVE.L    FileHandle,D1
  7793.     MOVE.L    #CRLF_Text,D2
  7794.     MOVEQ    #2,D3
  7795.     JSR    LVOWrite(A6)
  7796.     RTS
  7797.  
  7798. PrintFormFeed
  7799.     MOVE.L    DOSbase,A6
  7800.     MOVE.L    FileHandle,D1
  7801.     MOVE.L    #FF_Text,D2
  7802.     MOVEQ    #1,D3
  7803.     JSR    LVOWrite(A6)
  7804.     RTS
  7805.  
  7806. PrintPattern
  7807.     MOVE.L    D1,D6 ; D1=pattern number
  7808.     DIVU    #10,D6
  7809.     ADD.B    #'0',D6
  7810.     MOVE.B    D6,PattNumText1
  7811.     SWAP    D6
  7812.     ADD.B    #'0',D6
  7813.     MOVE.B    D6,PattNumText2
  7814.     MOVEM.L    D0-D7/A0-A6,-(SP)
  7815.     MOVE.L    FileHandle,D1
  7816.     MOVE.L    #PatternNumText,D2
  7817.     MOVEQ    #18,D3
  7818.     MOVE.L    DOSbase,A6
  7819.     JSR    LVOWrite(A6)
  7820.     MOVEM.L    (SP)+,D0-D7/A0-A6
  7821.  
  7822.     MOVE.L    D1,D6
  7823.     MOVE.L    SongDataPtr,A6
  7824.     LEA    sd_patterndata(A6),A6
  7825.     LSL.L    #8,D6
  7826.     LSL.L    #2,D6
  7827.     ADD.L    D6,A6
  7828.     CLR.L    PPattPos
  7829.     MOVEQ    #0,D6
  7830. pp_posloop
  7831.     MOVEQ    #0,D7
  7832.     MOVE.W    #2,TextLength
  7833.     MOVE.L    PPattPos,D1
  7834.     LEA    PattPosText,A5
  7835.     DIVU    #10,D1
  7836.     ADD.B    #'0',D1
  7837.     MOVE.B    D1,(A5)+
  7838.     CLR.W    D1
  7839.     SWAP    D1
  7840.     ADD.B    #'0',D1
  7841.     MOVE.B    D1,(A5)+
  7842.     ADDQ.L    #5,A5
  7843. pp_noteloop
  7844.     MOVEQ    #0,D0
  7845.     MOVEQ    #0,D1
  7846.     MOVE.W    #3,TextLength
  7847.     MOVE.W    (A6),D1
  7848.     AND.W    #$0FFF,D1
  7849.     LEA    PeriodTable,A0
  7850. pp_findloop
  7851.     CMP.W    0(A0,D0.L),D1
  7852.     BEQ    PrintNote
  7853.     ADDQ.L    #2,D0
  7854.     BRA.S    pp_findloop
  7855.  
  7856. PrintNote
  7857.     ADD.L    D0,D0
  7858.     ADD.L    NoteNamesPtr,D0
  7859.     MOVE.L    D0,A0
  7860.     MOVE.L    (A0),(A5)+
  7861.     CMP.B    #'¡',-3(A5)
  7862.     BNE.S    prnoxyz
  7863.     MOVE.B    #'b',-3(A5)
  7864. prnoxyz    ADDQ.L    #1,A5
  7865.     MOVEQ    #0,D0
  7866.     MOVE.W    (A6),D0
  7867.     AND.W    #$F000,D0
  7868.     LSR.W    #8,D0
  7869.     LSL.L    #1,D0
  7870.     LEA    FastHexTable,A0
  7871.     ADD.L    D0,A0
  7872.     MOVE.B    (A0),(A5)+
  7873.     MOVEQ    #0,D0
  7874.     MOVE.B    2(A6),D0
  7875.     LSL.L    #1,D0
  7876.     LEA    FastHexTable,A0
  7877.     ADD.L    D0,A0
  7878.     MOVE.W    (A0),(A5)+
  7879.     MOVEQ    #0,D0
  7880.     MOVE.B    3(A6),D0
  7881.     LSL.L    #1,D0
  7882.     LEA    FastHexTable,A0
  7883.     ADD.L    D0,A0
  7884.     MOVE.W    (A0),(A5)+
  7885.     ADDQ.L    #4,A5
  7886.     ADDQ.L    #4,A6
  7887.     ADDQ.L    #1,D7
  7888.     CMP.L    #4,D7
  7889.     BNE    pp_noteloop
  7890.     ADDQ.L    #1,PPattPos
  7891.     MOVEM.L    D0-D7/A0-A6,-(SP)
  7892.     MOVE.L    DOSbase,A6
  7893.     MOVE.L    FileHandle,D1
  7894.     MOVE.L    #PnText2,D2
  7895.     MOVEQ    #68,D3
  7896.     JSR    LVOWrite(A6)
  7897.     BSR    PrintCRLF
  7898.     MOVEM.L    (SP)+,D0-D7/A0-A6
  7899.     BTST    #2,$DFF016
  7900.     BEQ.S    NegativeReturn
  7901.     ADDQ.L    #1,D6
  7902.     CMP.L    #64,D6
  7903.     BNE    pp_posloop
  7904.     MOVEQ    #0,D0
  7905.     RTS
  7906.  
  7907. NegativeReturn
  7908.     MOVEQ    #-1,D0
  7909.     RTS
  7910.  
  7911. PositiveReturn
  7912.     MOVEQ    #0,D0
  7913.     RTS
  7914.  
  7915. ;---- Setup2 ----
  7916.  
  7917. Setup2    BSR    WaitForButtonUp
  7918.     MOVE.W    #7,CurrScreen
  7919.     CLR.W    LastSetupScreen
  7920.     ST    DisableAnalyzer
  7921.     ST    NoSampleInfo
  7922.     BSR    Clear100Lines
  7923.     MOVE.L    SetupMemPtr,D0
  7924.     BNE    set2skp
  7925.     BSR    SaveMainPic
  7926.     BEQ    ExitSetup
  7927. set2skp    BSR    DecompactSetup2
  7928.     BSR    SetScreenColors
  7929. refrsh2    BSR    ShowIntMode
  7930.     BSR    ShowTempo
  7931.     BSR    ShowSpeed
  7932.     BSR    ShowColEdit
  7933.     BSR    ShowRainbow
  7934.     BSR    GetColPos
  7935.     BSR    ShowColSliders
  7936.     BSR    ShowS2Modules
  7937.     BSR    ShowS2Songs
  7938.     BSR    ShowS2Samples
  7939.     BSR    ShowS2PTPath
  7940.     BSR    ShowS2MaxPLST
  7941.     BSR    ShowS2DMAWait
  7942.     BSR    ShowS2TuneNote
  7943.     BSR    ShowS2SalvAddr
  7944.     BRA    ShowS2T
  7945.  
  7946. CheckSetup2Gadgs
  7947.     MOVEM.W    MouseX2,D0/D1
  7948.     CMP.W    #210,D0
  7949.     BHS    Setup2Menu3
  7950.     CMP.W    #108,D0
  7951.     BHS.S    Setup2Menu2
  7952. ;---- Menu 1 ----
  7953.     CMP.W    #11,D1
  7954.     BLS    ToggleIntMode
  7955.     CMP.W    #22,D1
  7956.     BLS    ChangeTempo
  7957.     CMP.W    #33,D1
  7958.     BLS    ChangeSpeed
  7959.     CMP.W    #44,D1
  7960.     BLS    ToggleColEdit
  7961.     CMP.W    #55,D1
  7962.     BLS    RotOrSpread
  7963.     CMP.W    #66,D1
  7964.     BLS    SetRed2
  7965.     CMP.W    #77,D1
  7966.     BLS    SetGreen2
  7967.     CMP.W    #88,D1
  7968.     BLS    SetBlue2
  7969.     CMP.W    #99,D1
  7970.     BLS    ColorGadgets2
  7971.     RTS
  7972.  
  7973. Setup2Menu2
  7974.     CMP.W    #11,D1
  7975.     BLS    Set2ModPath
  7976.     CMP.W    #22,D1
  7977.     BLS    Set2SongPath
  7978.     CMP.W    #33,D1
  7979.     BLS    Set2SamPath
  7980.     CMP.W    #44,D1
  7981.     BLS    Set2PTPath
  7982.     CMP.W    #55,D1
  7983.     BLS    SetS2MaxPLST
  7984.     CMP.W    #66,D1
  7985.     BLS    SetS2DMAWait
  7986.     CMP.W    #77,D1
  7987.     BLS    SetS2TuneNote
  7988.     CMP.W    #88,D1
  7989.     BLS    SetS2SalvAddr
  7990.     CMP.W    #99,D1
  7991.     BLS    RecoverSong
  7992.     RTS
  7993.  
  7994. Setup2Menu3
  7995.     CMP.W    #11,D1
  7996.     BLS    ExitOrDefault
  7997.     CMP.W    #22,D1
  7998.     BLS    ToggleOverride
  7999.     CMP.W    #33,D1
  8000.     BLS    ToggleNosamples
  8001.     CMP.W    #44,D1
  8002.     BLS    ToggleBlankZero
  8003.     CMP.W    #55,D1
  8004.     BLS    ToggleShowDirs
  8005.     CMP.W    #66,D1
  8006.     BLS    ToggleShowPublic
  8007.     CMP.W    #77,D1
  8008.     BLS    ToggleCutToBuf
  8009.     CMP.W    #88,D1
  8010.     BLS    ToggleIFFLoop
  8011.     CMP.W    #99,D1
  8012.     BLS    ToggleHH
  8013.     RTS
  8014.  
  8015. ExitOrDefault
  8016.     CMP.W    #265,D0
  8017.     BLS.S    SetS2Default
  8018.     CMP.W    #306,D0
  8019.     BHS    Setup
  8020.     BRA    ExitSetup
  8021.  
  8022. SetS2Default
  8023.     LEA    SetDefaultsText(PC),A0
  8024.     BSR    AreYouSure
  8025.     BNE    Return1
  8026.     LEA    DefaultSetupData,A0
  8027.     LEA    SongsPath-SetupData(A0),A2
  8028.     LEA    SongsPath,A1
  8029.     MOVEQ    #95,D0
  8030. ss2dela    MOVE.B    (A2)+,(A1)+
  8031.     DBRA    D0,ss2dela
  8032.     LEA    PTPath-SetupData(A0),A2
  8033.     LEA    PTPath,A1
  8034.     MOVEQ    #31,D0
  8035. ss2delb    MOVE.B    (A2)+,(A1)+
  8036.     DBRA    D0,ss2delb
  8037.     LEA    MaxPLSTEntries-SetupData(A0),A2
  8038.     MOVE.W    (A2),MaxPLSTEntries
  8039.     LEA    DMAWait-SetupData(A0),A2
  8040.     MOVE.W    (A2),DMAWait
  8041.     LEA    TuneNote-SetupData(A0),A2
  8042.     MOVE.L    (A2),TuneNote
  8043.     LEA    SalvageAddress-SetupData(A0),A2
  8044.     LEA    SalvageAddress,A1
  8045.     MOVE.L    (A2)+,(A1)+
  8046.     MOVE.L    (A2),(A1)
  8047.     BRA    refrsh2
  8048.  
  8049. SetDefaultsText    dc.b "Set defaults?",0
  8050.  
  8051. ToggleIntMode
  8052.     BSR    ResetMusicInt
  8053.     EOR.B    #1,IntMode
  8054.     BSR    SetMusicInt
  8055.     BSR    SetTempo
  8056.     BSR    WaitForButtonUp
  8057. ShowIntMode
  8058.     LEA    VBlankText(PC),A0
  8059.     TST.B    IntMode
  8060.     BEQ.S    simskip
  8061.     LEA    CIAText(PC),A0
  8062. simskip    MOVEQ    #6,D0
  8063.     MOVE.W    #167,D1
  8064.     BRA    ShowText3
  8065.  
  8066. VBlankText    dc.b "VBLANK"
  8067. CIAText        dc.b " CIA  "
  8068.  
  8069. ChangeSpeed
  8070.     MOVEQ    #0,D1
  8071.     CMP.W    #94,D0
  8072.     BHS.S    SpeedDown
  8073.     CMP.W    #80,D0
  8074.     BHS.S    SpeedUp
  8075.     RTS
  8076.  
  8077. SpeedUp    MOVE.W    DefaultSpeed,D1
  8078.     ADDQ.B    #1,D1
  8079.     CMP.B    #$FF,D1
  8080.     BLS.S    spedup2
  8081.     MOVE.W    #$FF,D1
  8082. spedup2    MOVE.W    D1,DefaultSpeed
  8083.     MOVE.L    D1,CurrSpeed
  8084.     BSR.S    ShowSpeed
  8085.     BSR    Wait_4000
  8086.     BRA    Wait_4000
  8087. ShowSpeed
  8088.     MOVE.W    #608+440,TextOffset
  8089.     MOVE.W    DefaultSpeed,WordNumber
  8090.     JMP    PrintHexByte
  8091.  
  8092. SpeedDown
  8093.     MOVE.W    DefaultSpeed,D1
  8094.     SUB.B    #1,D1
  8095.     CMP.B    #1,D1
  8096.     BHS.S    spedup2
  8097.     MOVEQ    #1,D1
  8098.     BRA.S    spedup2
  8099.  
  8100.  
  8101. ToggleOverride
  8102.     EOR.B    #1,OverrideFlag
  8103.     BRA.S    ShowS2T
  8104. ToggleNosamples
  8105.     EOR.B    #1,NosamplesFlag
  8106.     BRA.S    ShowS2T
  8107. ToggleBlankZero
  8108.     EOR.B    #1,BlankZeroFlag
  8109.     BSR.S    ShowS2T
  8110.     BRA    RedrawPattern
  8111. ToggleShowDirs
  8112.     EOR.B    #1,ShowDirsFlag
  8113.     BRA.S    ShowS2T
  8114. ToggleShowPublic
  8115.     EOR.B    #1,ShowPublicFlag
  8116.     MOVE.W    #1,UpdateFreeMem
  8117.     BRA.S    ShowS2T
  8118. ToggleCutToBuf
  8119.     EOR.B    #1,CutToBufFlag
  8120.     BRA.S    ShowS2T
  8121. ToggleIFFLoop
  8122.     EOR.B    #1,IFFLoopFlag
  8123.     BRA.S    ShowS2T
  8124. ToggleHH
  8125.     EOR.B    #1,HHFlag
  8126.  
  8127. ShowS2T    CLR.B    RawKeyCode
  8128.     CMP.W    #7,CurrScreen
  8129.     BNE    Return1
  8130.     LEA    OverrideFlag,A4
  8131.     MOVE.W    #3,TextLength
  8132.     MOVEQ    #7,D7
  8133.     MOVE.W    #636,D6
  8134. sstloop2
  8135.     MOVE.W    D6,TextOffset
  8136.     LEA    ToggleOFFText,A0
  8137.     TST.B    (A4)+
  8138.     BEQ.S    sstskip2
  8139.     LEA    ToggleONText,A0
  8140. sstskip2
  8141.     BSR    ShowText2
  8142.     ADD.W    #440,D6
  8143.     DBRA    D7,sstloop2
  8144.     BRA    WaitForButtonUp
  8145.  
  8146. ShowS2Modules
  8147.     MOVE.W    #177,D1
  8148.     LEA    ModulesPath,A0
  8149. s2path    MOVEQ    #9,D0
  8150.     BRA    ShowText3
  8151.  
  8152. ShowS2Songs
  8153.     MOVE.W    #177+440,D1
  8154.     LEA    SongsPath,A0
  8155.     BRA.S    s2path
  8156.  
  8157. ShowS2Samples
  8158.     MOVE.W    #177+880,D1
  8159.     LEA    SamplePath,A0
  8160.     BRA.S    s2path
  8161.  
  8162. ShowS2PTPath
  8163.     MOVE.W    #177+1320,D1
  8164.     LEA    PTPath,A0
  8165.     BRA.S    s2path
  8166.  
  8167.  
  8168. Set2ModPath
  8169.     BSR    StorePtrCol
  8170.     BSR    SetWaitPtrCol
  8171.     LEA    ModulesPath,A6
  8172.     MOVE.L    A6,ShowTextPtr
  8173.     MOVE.L    A6,TextEndPtr
  8174.     ADD.L    #31,TextEndPtr
  8175.     MOVE.W    #9,TextLength
  8176.     MOVE.W    #177,A4
  8177.     BSR    GetTextLine
  8178.     BRA    RestorePtrCol
  8179.  
  8180. Set2SongPath
  8181.     BSR    StorePtrCol
  8182.     BSR    SetWaitPtrCol
  8183.     LEA    SongsPath,A6
  8184.     MOVE.L    A6,ShowTextPtr
  8185.     MOVE.L    A6,TextEndPtr
  8186.     ADD.L    #31,TextEndPtr
  8187.     MOVE.W    #9,TextLength
  8188.     MOVE.W    #177+440,A4
  8189.     BSR    GetTextLine
  8190.     BRA    RestorePtrCol
  8191.  
  8192. Set2SamPath
  8193.     BSR    StorePtrCol
  8194.     BSR    SetWaitPtrCol
  8195.     LEA    SamplePath,A6
  8196.     MOVE.L    A6,ShowTextPtr
  8197.     MOVE.L    A6,TextEndPtr
  8198.     ADD.L    #31,TextEndPtr
  8199.     MOVE.W    #9,TextLength
  8200.     MOVE.W    #177+880,A4
  8201.     BSR    GetTextLine
  8202.     BRA    RestorePtrCol
  8203.  
  8204. Set2PTPath
  8205.     BSR    StorePtrCol
  8206.     BSR    SetWaitPtrCol
  8207.     LEA    PTPath,A6
  8208.     MOVE.L    A6,ShowTextPtr
  8209.     MOVE.L    A6,TextEndPtr
  8210.     ADD.L    #31,TextEndPtr
  8211.     MOVE.W    #9,TextLength
  8212.     MOVE.W    #177+1320,A4
  8213.     BSR    GetTextLine
  8214.     BRA    RestorePtrCol
  8215.  
  8216. SetS2MaxPLST
  8217.     CMP.W    #199,D0
  8218.     BHS.S    S2plstd
  8219.     CMP.W    #188,D0
  8220.     BHS.S    S2PLSTu
  8221.     RTS
  8222. S2PLSTu    MOVE.W    MaxPLSTEntries,D0
  8223.     ADD.W    #100,D0
  8224.     CMP.W    #9999,D0
  8225.     BLS.S    s2pu
  8226.     MOVE.W    #9999,D0
  8227. s2pu    MOVE.W    D0,MaxPLSTEntries
  8228.     BSR.S    ShowS2MaxPLST
  8229.     BRA    Wait_4000
  8230.  
  8231. S2PLSTd    MOVEQ    #0,D0
  8232.     MOVE.W    MaxPLSTEntries,D0
  8233.     ADDQ.W    #1,D0
  8234.     DIVU    #100,D0
  8235.     SUBQ.W    #1,D0
  8236.     BPL.S    s2pd
  8237.     MOVEQ    #0,D0
  8238.     BRA.S    s2pu
  8239. s2pd    MULU    #100,D0
  8240.     BRA.S    s2pu
  8241.  
  8242. ShowS2MaxPLST
  8243.     MOVE.W    MaxPLSTEntries,WordNumber
  8244.     MOVE.W    #1939,TextOffset
  8245.     BRA    Print4DecDigits
  8246.  
  8247. SetS2DMAWait
  8248.     CMP.W    #199,D0
  8249.     BHS.S    S2dwd
  8250.     CMP.W    #188,D0
  8251.     BHS.S    S2dwu
  8252.     RTS
  8253. S2dwu    MOVE.W    DMAWait,D0
  8254.     ADDQ.W    #1,D0
  8255.     BTST    #2,$DFF016
  8256.     BNE.S    s2npu
  8257.     ADD.W    #9,D0
  8258. s2npu    CMP.W    #9999,D0
  8259.     BLS.S    s2du
  8260.     MOVE.W    #9999,D0
  8261. s2du    MOVE.W    D0,DMAWait
  8262.     BSR.S    ShowS2DMAWait
  8263.     BRA    Wait_4000
  8264.  
  8265. S2dwd    MOVE.W    DMAWait,D0
  8266.     SUBQ.W    #1,D0
  8267.     BTST    #2,$DFF016
  8268.     BNE.S    s2npd
  8269.     SUB.W    #9,D0
  8270. s2npd    TST.W    D0
  8271.     BPL.S    s2du
  8272.     MOVEQ    #0,D0
  8273.     BRA.S    s2du
  8274.  
  8275. ShowS2DMAWait
  8276.     MOVE.W    DMAWAit,WordNumber
  8277.     MOVE.W    #2379,TextOffset
  8278.     BRA    Print4DecDigits
  8279.  
  8280. SetS2TuneNote
  8281.     CMP.W    #187,D0
  8282.     BHS.S    ss2tvol
  8283.     MOVE.W    #2820,D1
  8284.     MOVEQ    #3,D0
  8285.     LEA    SpcNoteText,A0
  8286.     BSR    ShowText3
  8287.     MOVE.W    #3,SamNoteType
  8288.     MOVE.L    #TuneNote,SplitAddress
  8289.     BRA    WaitForButtonUp
  8290.  
  8291. ShowS2TuneNote
  8292.     CMP.W    #7,CurrScreen
  8293.     BNE    Return1
  8294.     MOVE.L    NoteNamesPtr,A4
  8295.     MOVE.W    TuneNote,D0
  8296.     LSL.W    #2,D0
  8297.     LEA    (A4,D0.W),A0
  8298.     MOVEQ    #4,D0
  8299.     MOVE.W    #2820,D1
  8300.     BSR    ShowText3
  8301.     MOVE.W    TToneVol,WordNumber
  8302.     MOVE.W    #2824,TextOffset
  8303.     BRA    PrintHexByte
  8304.  
  8305. ss2tvol    MOVE.W    #2824,TextOffset
  8306.     BSR    GetHexByte
  8307.     MOVE.W    D0,TToneVol
  8308.     BRA.S    ShowS2TuneNote
  8309.  
  8310. SetS2SalvAddr
  8311.     BRA    ShowNotImpl
  8312.     BSR    StorePtrCol
  8313.     BSR    SetWaitPtrCol
  8314.     LEA    SalvageAddress,A6
  8315.     MOVE.L    A6,ShowTextPtr
  8316.     MOVE.L    A6,TextEndPtr
  8317.     ADD.L    #6,TextEndPtr
  8318.     MOVE.W    #6,TextLength
  8319.     MOVE.W    #3260,A4
  8320.     MOVE.B    #5,EnterTextFlag
  8321.     BSR    GetTextLine
  8322.     CLR.B    EnterTextFlag
  8323.     BSR    RestorePtrCol
  8324. ShowS2SalvAddr
  8325.     LEA    SalvageAddress,A0
  8326.     MOVEQ    #6,D0
  8327.     MOVE.W    #3260,D1
  8328.     BRA    ShowText3
  8329.  
  8330. RecoverSong
  8331.     BRA    ShowNotImpl
  8332.     LEA    RecoverSongText(PC),A0
  8333.     BSR    AreYouSure
  8334.     BNE    Return1
  8335.     BSR    DoClearSong
  8336.     BSR    ClrSampleInfo
  8337.     BSR.S    FindAdr
  8338.     MOVE.L    D0,A0
  8339.     MOVE.L    SongDataPtr,A1
  8340.     MOVE.L    #70716,D0
  8341. recloop    MOVE.B    (A0)+,(A1)+
  8342.     SUBQ.L    #1,D0
  8343.     BNE.S    recloop    
  8344.     BRA    RedrawPattern
  8345.  
  8346. FindAdr    LEA    SalvageAddress+6,A0
  8347.     BSR    HexToInteger
  8348.     MOVE.W    D0,D3
  8349.     MOVEQ    #0,D0
  8350.     BSR    HexToInteger2
  8351.     SWAP    D0
  8352.     OR.W    D3,D0
  8353.     RTS
  8354.  
  8355. RecoverSongText    dc.b    "Recover Song?",0
  8356.  
  8357. ToggleColEdit
  8358.     CMP.W    #79,D0
  8359.     BHS    SelectColor2
  8360.     CLR.W    SpreadFlag
  8361.     LEA    VUMeterColors,A0
  8362.     MOVEQ    #48,D0
  8363.     CMP.L    TheRightColors(PC),A0
  8364.     BNE.S    tced2
  8365.     LEA    AnalyzerColors,A0
  8366.     MOVEQ    #36,D0
  8367. tced2    MOVE.L    A0,TheRightColors
  8368.     MOVE.W    D0,ColorsMax
  8369.     CMP.W    RainbowPos(PC),D0
  8370.     BHI.S    tced3
  8371.     CLR.W    RainbowPos
  8372. tced3    BSR    ShowRainbow
  8373.     BSR.S    ShowColEdit
  8374.     BRA    WaitForButtonUp
  8375. ShowColEdit
  8376.     LEA    cedtxt1(PC),A0
  8377.     LEA    VUMeterColors,A1
  8378.     CMP.L    TheRightColors(PC),A1
  8379.     BEQ.S    shcoed
  8380.     LEA    cedtxt2(PC),A0
  8381. shcoed    MOVEQ    #6,D0
  8382.     MOVE.W    #1483,D1
  8383.     BRA    ShowText3
  8384.  
  8385. cedtxt1    dc.b "VU-MTR"
  8386. cedtxt2 dc.b "ANALYZ"
  8387.  
  8388. RotOrSpread
  8389.     CMP.W    #16,D0
  8390.     BLO.S    RotColUp
  8391.     CMP.W    #32,D0
  8392.     BLO.S    RotColDown
  8393.     CMP.W    #79,D0
  8394.     BHS    SelectColor2
  8395.     BRA    SpreadColors
  8396.  
  8397. RotColUp
  8398.     CLR.W    SpreadFlag
  8399.     MOVE.L    TheRightColors(PC),A0
  8400.     MOVE.W    (A0),D0
  8401.     MOVE.W    ColorsMax(PC),D1
  8402.     SUBQ.W    #2,D1
  8403. rocoup1    MOVE.W    2(A0),(A0)+
  8404.     DBRA    D1,rocoup1
  8405.     MOVE.W    D0,(A0)
  8406. rocoup2    BSR    GetColPos
  8407.     BSR    ShowColSliders
  8408.     BSR    ShowRainbow
  8409.     BRA    SetupVUCols
  8410.  
  8411. RotColDown
  8412.     CLR.W    SpreadFlag
  8413.     MOVE.L    TheRightColors(PC),A0
  8414.     MOVE.W    ColorsMax(PC),D1
  8415.     ADD.W    D1,A0
  8416.     ADD.W    D1,A0
  8417.     MOVE.W    -(A0),D0
  8418.     SUBQ.W    #2,D1
  8419. rocodn1    MOVE.W    -2(A0),(A0)
  8420.     SUBQ.L    #2,A0
  8421.     DBRA    D1,rocodn1
  8422.     MOVE.W    D0,(A0)
  8423.     BRA.S    rocoup2
  8424.  
  8425. SpreadColors
  8426.     MOVE.W    RainbowPos,SpreadFrom
  8427.     MOVE.W    #1,SpreadFlag
  8428.     RTS
  8429.  
  8430. SpreadFrom    dc.w 0
  8431. SpreadFlag    dc.w 0
  8432.  
  8433. ColorGadgets2
  8434.     CLR.W    SpreadFlag
  8435.     CMP.W    #79,D0
  8436.     BHS.S    SetDefaultCol2
  8437.     CMP.W    #33,D0
  8438.     BHS.S    CancelCol2
  8439.     MOVE.L    UndoColAddr,A0
  8440.     MOVE.W    UndoCol,D1
  8441.     MOVE.W    (A0),UndoCol
  8442.     MOVE.W    D1,(A0)
  8443.     BRA    rocoup2
  8444.  
  8445. SetDefaultCol2
  8446.     MOVE.L    TheRightColors(PC),A0
  8447.     MOVE.L    A0,A1
  8448.     SUB.L    #SetupData,A1
  8449.     ADD.L    #DefaultSetupData,A1
  8450. sedeco4    MOVE.W    ColorsMax,D0
  8451.     BRA.S    sedeco3
  8452. sedeco2    MOVE.W    (A1)+,(A0)+
  8453. sedeco3    DBRA    D0,sedeco2
  8454.     BRA    rocoup2
  8455.  
  8456. CancelCol2
  8457.     MOVE.L    TheRightColors(PC),A0
  8458.     MOVE.L    A0,A1
  8459.     SUB.L    #VUMeterColors,A1
  8460.     ADD.L    #SaveColors,A1
  8461.     BRA.S    sedeco4
  8462.  
  8463. GetColAddr
  8464.     MOVE.L    TheRightColors(PC),A0
  8465.     MOVE.W    RainbowPos,D1
  8466.     ADD.W    D1,D1
  8467.     LEA    (A0,D1.W),A0
  8468.     MOVE.W    (A0),D1
  8469.     MOVE.W    D1,D2
  8470.     RTS
  8471.  
  8472. SetRed2    CMP.W    #79,D0
  8473.     BHS    SelectColor2
  8474. set2r2    BSR    GetColPos
  8475.     AND.W    #$0F00,D2
  8476.     LSR.W    #8,D2
  8477.     CMP.B    D2,D0
  8478.     BEQ.S    setrsk2
  8479.     AND.W    #$00FF,D1
  8480.     LSL.W    #8,D0
  8481.     OR.W    D0,D1
  8482.     MOVE.W    D1,(A0)
  8483.     BSR    ShowColSliders
  8484.     BSR    ShowRainbow
  8485.     BSR    SetupVUCols
  8486. setrsk2    BTST    #6,$BFE001
  8487.     BEQ.S    set2r2
  8488.     RTS
  8489.  
  8490. SetGreen2
  8491.     CMP.W    #79,D0
  8492.     BHS    SelectColor2
  8493. set2g2    BSR    GetColPos
  8494.     AND.W    #$00F0,D2
  8495.     LSR.W    #4,D2
  8496.     CMP.B    D2,D0
  8497.     BEQ.S    setgsk2
  8498.     AND.W    #$0F0F,D1
  8499.     LSL.W    #4,D0
  8500.     OR.W    D0,D1
  8501.     MOVE.W    D1,(A0)
  8502.     BSR    ShowColSliders
  8503.     BSR    ShowRainbow
  8504.     BSR    SetupVUCols
  8505. setgsk2    BTST    #6,$BFE001
  8506.     BEQ.S    set2g2
  8507.     RTS
  8508.  
  8509. SetBlue2
  8510.     CMP.W    #79,D0
  8511.     BHS.S    SelectColor2
  8512. set2b2    BSR    GetColPos
  8513.     AND.W    #$000F,D2
  8514.     CMP.B    D2,D0
  8515.     BEQ.S    setbsk2
  8516.     AND.W    #$0FF0,D1
  8517.     OR.W    D0,D1
  8518.     MOVE.W    D1,(A0)
  8519.     BSR    ShowColSliders
  8520.     BSR    ShowRainbow
  8521.     BSR    SetupVUCols
  8522. setbsk2    BTST    #6,$BFE001
  8523.     BEQ.S    set2b2
  8524.     RTS
  8525.  
  8526. SelectColor2
  8527.     MOVEQ    #0,D7
  8528. setcolp    BTST    #6,$BFE001
  8529.     BNE.S    ChkSpread
  8530.     MOVE.W    ColorsMax(PC),D0
  8531.     MOVE.W    MouseY,D1
  8532.     CMP.W    D7,D1
  8533.     BEQ.S    setcolp
  8534.     MOVE.W    D1,D7
  8535.     CMP.W    #37,D1
  8536.     BHS.S    setcoly
  8537.     MOVEQ    #37,D1
  8538. setcoly    SUB.W    #37,D1
  8539.     CMP.W    D0,D1
  8540.     BLT.S    setcol2
  8541.     MOVE.W    D0,D1
  8542.     SUBQ.W    #1,D1
  8543. setcol2    MOVE.W    D1,RainbowPos
  8544.     BSR    ShowRainbow
  8545.     BSR    GetColPos
  8546.     MOVE.L    A0,UndoColAddr
  8547.     MOVE.W    D1,UndoCol
  8548.     BSR    ShowColSliders
  8549.     BRA    setcolp
  8550.  
  8551. ChkSpread
  8552.     TST.W    SpreadFlag
  8553.     BEQ    Return1
  8554.     CLR.W    SpreadFlag
  8555.     BSR    GetColPos
  8556.     MOVE.W    SpreadFrom,D0
  8557.     MOVE.W    RainbowPos,D1
  8558.     CMP.W    D1,D0
  8559.     BLO.S    chkspr2
  8560.     EXG    D0,D1
  8561. chkspr2    MOVE.W    D1,D4
  8562.     SUB.W    D0,D4
  8563.     CMP.W    #1,D4
  8564.     BLS    Return1
  8565.     MOVE.L    D4,A2
  8566.     ADD.W    D4,D4
  8567.     MOVE.L    TheRightColors(PC),A0
  8568.     MOVE.L    A0,A1
  8569.     ADD.W    D0,D0
  8570.     ADD.W    D1,D1
  8571.     LEA    (A0,D0.W),A0    ; 1st col
  8572.     MOVE.W    (A0),D2
  8573.     LEA    (A1,D1.W),A1
  8574.     MOVE.W    (A1),D3        ; 2nd col
  8575.     MOVEQ    #0,D5
  8576.  
  8577. sprdlop    MOVE.W    D2,D0 ; red
  8578.     LSR.W    #8,D0
  8579.     MOVE.W    D3,D1
  8580.     LSR.W    #8,D1
  8581.     BSR    ColCrossfade
  8582.     LSL.W    #8,D0
  8583.     MOVE.W    D0,D7
  8584.     MOVE.W    D2,D0 ; green
  8585.     LSR.W    #4,D0
  8586.     AND.W    #$000F,D0
  8587.     MOVE.W    D3,D1
  8588.     LSR.W    #4,D1
  8589.     AND.W    #$000F,D1
  8590.     BSR    ColCrossfade
  8591.     LSL.W    #4,D0
  8592.     OR.W    D0,D7
  8593.     MOVE.W    D2,D0 ; blue
  8594.     AND.W    #$000F,D0
  8595.     MOVE.W    D3,D1
  8596.     AND.W    #$000F,D1
  8597.     BSR    ColCrossfade
  8598.     OR.W    D0,D7
  8599.     ADDQ.W    #2,D5
  8600.     MOVE.W    D7,(A0)+
  8601.     CMP.L    A1,A0
  8602.     BLO    sprdlop
  8603.     BRA    rocoup2
  8604.  
  8605. ColCrossfade
  8606.     MOVE.W    D4,D6
  8607.     SUB.W    D5,D6
  8608.     MULU    D6,D0
  8609.     ADD.L    A2,D0
  8610.     MULU    D5,D1
  8611.     ADD.W    D1,D0
  8612.     DIVU    D4,D0
  8613.     CMP.W    #15,D0
  8614.     BLS    Return1
  8615.     MOVEQ    #15,D0
  8616.     RTS
  8617.  
  8618. ShowRainbow
  8619.     MOVE.L    TextBplPtr,A0
  8620.     LEA    1490(A0),A0
  8621.     MOVEQ    #0,D1
  8622.     MOVE.L    #$00FFE000,D2
  8623.     MOVE.W    RainbowPos,D3
  8624. rainlop    MOVE.L    D2,D0
  8625.     CMP.W    D3,D1
  8626.     BNE.S    rainsk1
  8627.     MOVE.L    #$1EFFEF00,D0
  8628. rainsk1    MOVE.L    D0,(A0)
  8629.     LEA    40(A0),A0
  8630.     ADDQ.W    #1,D1
  8631.     CMP.W    #48,D1
  8632.     BLO.S    rainlop
  8633.     LEA    CopListAnalyzer,A0
  8634.     MOVE.L    TheRightColors(PC),A1
  8635.     MOVE.W    #$5107,D0
  8636.     MOVEQ    #47,D1
  8637.     MOVEQ    #0,D2
  8638. rainlp2    MOVE.W    D0,(A0)+
  8639.     MOVE.W    #$FFFE,(A0)+
  8640.     MOVE.W    #$018E,(A0)+
  8641.     CMP.W    ColorsMax(PC),D2
  8642.     BLO.S    rainsk2
  8643.     CLR.W    (A0)+
  8644.     BRA.S    rainsk3
  8645. rainsk2    MOVE.W    (A1)+,(A0)+
  8646. rainsk3    ADD.W    #$0100,D0
  8647.     ADDQ.W    #1,D2
  8648.     DBRA    D1,rainlp2
  8649.     MOVEQ    #63,D0
  8650. rainlp3    MOVE.L    #$01B80000,(A0)+
  8651.     DBRA    D0,rainlp3
  8652.     RTS
  8653.  
  8654. RainbowPos    dc.w    0
  8655. TheRightColors    dc.l    0
  8656. ColorsMax    dc.w    48
  8657.  
  8658. ;---- PT Decompacter ----
  8659.  
  8660. Decompact
  8661.     MOVE.L    A0,CompPtr
  8662.     MOVE.L    D0,CompLen
  8663.     BSR.S    FreeDecompMem
  8664.     MOVE.L    CompPtr(PC),A0
  8665.     MOVE.L    (A0),D0
  8666.     MOVE.L    D0,DecompMemSize
  8667.     MOVEQ    #MEMF_PUBLIC,D1
  8668.     MOVE.L    4.W,A6
  8669.     JSR    LVOAllocMem(A6)
  8670.     MOVE.L    D0,DecompMemPtr
  8671.     BEQ    OutOfMemErr
  8672.     MOVE.L    D0,A1
  8673.     MOVE.L    CompPtr(PC),A0
  8674.     MOVE.L    CompLen(PC),D0
  8675.     ADDQ.L    #4,A0
  8676.     SUBQ.L    #4,D0
  8677. dcmloop    MOVE.B    (A0)+,D1
  8678.     CMP.B    #181,D1
  8679.     BEQ.S    DecodeIt
  8680.     MOVE.B    D1,(A1)+
  8681. decom2    SUBQ.L    #1,D0
  8682.     CMP.L    #0,D0
  8683.     BGT.S    dcmloop
  8684.     MOVE.L    DecompMemPtr,A1
  8685.     MOVEQ    #-1,D0
  8686.     RTS
  8687.  
  8688. DecodeIt
  8689.     MOVEQ    #0,D1
  8690.     MOVE.B    (A0)+,D1
  8691.     MOVE.B    (A0)+,D2
  8692. dcdloop    MOVE.B    D2,(A1)+
  8693.     DBRA    D1,dcdloop
  8694.     SUBQ.L    #2,D0
  8695.     BRA.S    decom2
  8696.  
  8697. FreeDecompMem
  8698.     MOVE.L    DecompMemPtr,D0
  8699.     BEQ    Return1
  8700.     MOVE.L    D0,A1
  8701.     MOVE.L    DecompMemSize,D0
  8702.     MOVE.L    4.W,A6
  8703.     JSR    LVOFreeMem(A6)    
  8704.     CLR.L    DecompMemPtr
  8705.     RTS
  8706.  
  8707. CompPtr    dc.l    0
  8708. CompLen    dc.l    0
  8709.  
  8710. ;---- Position Insert/Delete Gadgets ----
  8711.  
  8712. PosInsDelGadgs
  8713.     MOVE.W    MouseY2,D0
  8714.     CMP.W    #11,D0
  8715.     BHS    Return1
  8716.     MOVE.W    MouseX2,D0
  8717.     CMP.W    #62,D0
  8718.     BHS    Return1
  8719.     CMP.W    #51,D0
  8720.     BHS.S    PosDelete
  8721.     CMP.W    #40,D0
  8722.     BHS.S    PosInsert
  8723.     RTS
  8724.  
  8725. PosInsert
  8726.     MOVE.L    SongDataPtr,A0
  8727.     LEA    sd_pattpos(A0),A0
  8728.     ADD.L    #126,A0
  8729.     MOVEQ    #127,D0
  8730.     MOVE.L    CurrPos,D1
  8731.     AND.L    #127,D1
  8732. posinloop
  8733.     MOVE.B    (A0),1(A0)
  8734.     SUBQ.L    #1,A0
  8735.     SUBQ.L    #1,D0
  8736.     CMP.L    D1,D0
  8737.     BHI.S    posinloop
  8738.     CLR.B    1(A0)
  8739.     BSR    ShowPosition
  8740.     CLR.W    UpOrDown
  8741.     BSR    SongLengthGadg
  8742.     BRA    WaitForButtonUp
  8743.  
  8744. PosDelete
  8745.     MOVE.L    SongDataPtr,A0
  8746.     LEA    sd_pattpos(A0),A0
  8747.     MOVE.L    CurrPos,D0
  8748.     AND.L    #127,D0
  8749.     ADD.L    D0,A0
  8750. posdeloop
  8751.     MOVE.B    1(A0),(A0)
  8752.     ADDQ.L    #1,A0
  8753.     ADDQ.L    #1,D0
  8754.     CMP.L    #127,D0
  8755.     BLS.S    posdeloop
  8756.     CLR.B    -1(A0)
  8757.     BSR    ShowPosition
  8758.     MOVE.W    #-1,UpOrDown
  8759.     BSR    SongLengthGadg
  8760.     BRA    WaitForButtonUp
  8761.  
  8762. ;---- Enter number gadg ----
  8763.  
  8764. EnterNumGadg
  8765.     MOVE.W    MouseY2,D1
  8766.     CMP.W    #11,D1
  8767.     BLO    EnterPosGadg
  8768.     CMP.W    #22,D1
  8769.     BLO    EnterPattGadg
  8770.     CMP.W    #33,D1
  8771.     BLO    EnterLenGadg
  8772.     RTS
  8773.  
  8774. EnterPosGadg
  8775.     CLR.B    RawKeyCode
  8776.     MOVE.W    #76,LineCurX
  8777.     MOVE.W    #10,LineCurY
  8778.     MOVE.W    #169,TextOffset
  8779.     BSR    GetDec3Dig
  8780.     TST.W    AbortDecFlag
  8781.     BNE    pogskip
  8782.     CMP.W    #127,D0
  8783.     BLS.S    eposgok
  8784.     MOVEQ    #127,D0
  8785. eposgok    MOVE.L    D0,CurrPos
  8786.     BRA    pogskip
  8787.  
  8788. EnterPattGadg
  8789.     CLR.B    RawKeyCode
  8790.     MOVE.W    #84,LineCurX
  8791.     MOVE.W    #21,LineCurY
  8792.     MOVE.W    #610,TextOffset
  8793.     BSR    GetDecByte
  8794.     TST.W    AbortDecFlag
  8795.     BNE    pogskip
  8796.     CMP.B    #63,D0
  8797.     BLS.S    epgok
  8798.     MOVEQ    #63,D0
  8799. epgok    MOVE.L    SongDataPtr,A0
  8800.     LEA    sd_pattpos(A0),A0
  8801.     ADD.L    CurrPos,A0
  8802.     MOVE.B    D0,(A0)
  8803.     BRA    pogskip
  8804.  
  8805. EnterLenGadg
  8806.     CLR.B    RawKeyCode
  8807.     MOVE.W    #76,LineCurX
  8808.     MOVE.W    #32,LineCurY
  8809.     MOVE.W    #1049,TextOffset
  8810.     BSR    GetDec3Dig
  8811.     TST.W    AbortDecFlag
  8812.     BNE    ShowSongLength
  8813.     CMP.W    #128,D0
  8814.     BLS.S    elengok
  8815.     MOVE.B    #128,D0
  8816. elengok    MOVE.L    SongDataPtr,A0
  8817.     LEA    sd_numofpatt(A0),A0
  8818.     MOVE.B    D0,(A0)
  8819.     BRA    ShowSongLength
  8820.  
  8821. GetDec3Dig
  8822.     MOVE.W    #1,AbortDecFlag
  8823.     BSR    StorePtrCol
  8824.     BSR    SetWaitPtrCol
  8825.     BSR    UpdateLineCurPos
  8826. gd3loop    BSR    GetKey0_9
  8827.     CMP.W    #68,D1
  8828.     BEQ.S    gd3exit
  8829.     CMP.W    #2,D1
  8830.     BHI.S    gd3loop
  8831.     MOVE.W    D1,D0
  8832.     MULU    #100,D0
  8833.     MOVE.W    D0,gd3temp
  8834.     BSR    ShowOneDigit
  8835.     ADDQ.W    #8,LineCurX
  8836.     BSR    UpdateLineCurPos
  8837.     BSR    GetKey0_9
  8838.     CMP.B    #68,D1
  8839.     BEQ.S    gd3exit
  8840.     MOVE.W    D1,D0
  8841.     MULU    #10,D0
  8842.     ADD.W    D0,gd3temp
  8843.     BSR    ShowOneDigit
  8844.     ADDQ.W    #8,LineCurX
  8845.     BSR    UpdateLineCurPos
  8846.     BSR    GetKey0_9
  8847.     CMP.B    #68,D1
  8848.     BEQ.S    gd3exit
  8849.     ADD.W    D1,gd3temp
  8850.     CLR.W    AbortDecFlag
  8851. gd3exit    CLR.W    LineCurX
  8852.     MOVE.W    #270,LineCurY
  8853.     BSR    UpdateLineCurPos
  8854.     BSR    RestorePtrCol
  8855.     MOVEQ    #0,D0
  8856.     MOVE.W    gd3temp(PC),D0
  8857.     RTS
  8858.  
  8859. gd3temp    dc.w    0
  8860.  
  8861. ;----  Up/Down Gadgets ----
  8862.  
  8863. DownGadgets
  8864.     MOVE.W    #1,UpdateFreeMem
  8865.     MOVE.W    #-1,UpOrDown
  8866.     BRA.S    ug2
  8867.  
  8868. UpGadgets
  8869.     MOVE.W    #1,UpdateFreeMem
  8870.     CLR.W    UpOrDown
  8871. ug2    MOVE.W    MouseY2,D0
  8872.     CMP.W    #100,D0
  8873.     BHS    Return1
  8874.     CMP.W    #89,D0
  8875.     BHS    RepLenGadg
  8876.     CMP.W    #78,D0
  8877.     BHS    RepeatGadg
  8878.     CMP.W    #67,D0
  8879.     BHS    SampleLengthGadg
  8880.     CMP.W    #56,D0
  8881.     BHS    VolumeGadg
  8882.     CMP.W    #45,D0
  8883.     BHS    SampleNumGadg
  8884.     CMP.W    #34,D0
  8885.     BHS    FineTuneGadg
  8886.     CMP.W    #23,D0
  8887.     BHS    SongLengthGadg
  8888.     CMP.W    #12,D0
  8889.     BHS    PatternGadg
  8890.     TST.W    MouseY2
  8891.     BHS.S    PositionGadg
  8892.     RTS
  8893.  
  8894. PositionGadg
  8895.     TST.W    UpOrDown
  8896.     BMI.S    PositionDown
  8897. PositionUp
  8898.     ADDQ.L    #1,CurrPos
  8899.     BTST    #2,$DFF016
  8900.     BNE.S    pogskp2
  8901.     ADD.L    #9,CurrPos
  8902. pogskp2    CMP.L    #127,CurrPos
  8903.     BLS.S    pogskip
  8904.     MOVE.L    #127,CurrPos
  8905. pogskip    MOVE.L    CurrPos,SongPosition
  8906.     BSR    ShowPosition
  8907.     BSR    Wait_4000
  8908.     BSR    Wait_4000
  8909.     BRA    Wait_4000
  8910.  
  8911. PositionDown
  8912.     SUBQ.L    #1,CurrPos
  8913.     BTST    #2,$DFF016
  8914.     BNE.S    pogskp3
  8915.     SUB.L    #9,CurrPos
  8916. pogskp3    TST.L    CurrPos
  8917.     BPL.S    pogskip
  8918.     CLR.L    CurrPos
  8919.     BRA.S    pogskip
  8920.  
  8921. PatternGadg
  8922.     MOVE.L    SongDataPtr,A0
  8923.     LEA    sd_pattpos(A0),A0
  8924.     TST.W    UpOrDown
  8925.     BMI.S    PatternDown
  8926. PatternUp
  8927.     ADD.L    CurrPos,A0
  8928.     ADDQ.B    #1,(A0)
  8929.     BTST    #2,$DFF016
  8930.     BNE.S    pagaskp
  8931.     ADD.B    #9,(A0)
  8932. pagaskp    CMP.B    #63,(A0)
  8933.     BLS.S    pogskip
  8934.     MOVE.B    #63,(A0)
  8935.     BRA.S    pogskip
  8936.  
  8937. PatternDown
  8938.     ADD.L    CurrPos,A0
  8939.     SUBQ.B    #1,(A0)
  8940.     BTST    #2,$DFF016
  8941.     BNE.S    padoskp
  8942.     SUB.B    #9,(A0)
  8943. padoskp    TST.B    (A0)
  8944.     BPL    pogskip
  8945.     CLR.B    (A0)
  8946.     BRA    pogskip
  8947.  
  8948.  
  8949. SongLengthGadg
  8950.     MOVE.L    SongDataPtr,A0
  8951.     LEA    sd_numofpatt(A0),A0
  8952.     TST.W    UpOrDown
  8953.     BMI.S    SongLengthDown
  8954. SongLengthUp
  8955.     ADDQ.B    #1,(A0)
  8956.     BTST    #2,$DFF016
  8957.     BNE.S    slupskp
  8958.     ADD.B    #9,(A0)
  8959. slupskp    CMP.B    #127,(A0)
  8960.     BMI.S    solgskip
  8961.     MOVE.B    #127,(A0)
  8962. solgskip
  8963.     BSR    ShowSongLength
  8964.     BSR    Wait_4000
  8965.     BSR    Wait_4000
  8966.     BRA    Wait_4000
  8967.  
  8968. SongLengthDown
  8969.     SUBQ.B    #1,(A0)
  8970.     BTST    #2,$DFF016
  8971.     BNE.S    sldoskp
  8972.     SUB.B    #9,(A0)
  8973. sldoskp    CMP.B    #1,(A0)
  8974.     BGE.S    solgskip
  8975.     MOVE.B    #1,(A0)
  8976.     BRA.S    solgskip
  8977.  
  8978.  
  8979. SampleNumGadg
  8980.     BTST    #2,$DFF016    ; Check Right Mousebutton
  8981.     BNE.S    SampleNum2
  8982.     TST.W    InsNum
  8983.     BEQ    ShowSampleInfo
  8984.     MOVE.W    InsNum,LastInsNum
  8985.     CLR.W    InsNum
  8986.     BRA    ShowSampleInfo
  8987.  
  8988. SampleNum2
  8989.     TST.W    UpOrDown
  8990.     BMI.S    SampleNumDown
  8991. SampleNumUp
  8992.     ADDQ.W    #1,InsNum
  8993.     CMP.W    #31,InsNum
  8994.     BMI.S    snuskip
  8995.     MOVE.W    #31,InsNum
  8996. snuskip    BSR    redrsam
  8997.     BSR    Wait_4000
  8998.     BRA    Wait_4000
  8999.  
  9000. SampleNumDown
  9001.     TST.W    InsNum
  9002.     BEQ.S    snuskip
  9003.     SUBQ.W    #1,InsNum
  9004.     CMP.W    #1,InsNum
  9005.     BPL.S    snuskip
  9006.     MOVE.W    #1,InsNum
  9007.     BRA.S    snuskip
  9008.  
  9009. FineTuneGadg
  9010.     MOVE.L    SongDataPtr,A0
  9011.     LEA    12(A0),A0
  9012.     MOVE.W    InsNum,D0
  9013.     BEQ    Return1
  9014.     MULU    #30,D0
  9015.     ADD.L    D0,A0
  9016.     BTST    #2,$DFF016
  9017.     BNE.S    ftgskip
  9018.     CLR.B    2(A0)
  9019.     BRA.S    ftuskip
  9020. ftgskip    TST.W    UpOrDown
  9021.     BMI.S    FineTuneDown
  9022. FineTuneUp
  9023.     AND.B    #$0F,2(A0)
  9024.     CMP.B    #7,2(A0)
  9025.     BEQ.S    ftuskip
  9026.     ADDQ.B    #1,2(A0)
  9027.     AND.B    #$0F,2(A0)
  9028. ftuskip    BSR    ShowSampleInfo
  9029.     BSR    Wait_4000
  9030.     BRA    Wait_4000
  9031.  
  9032. FineTuneDown
  9033.     AND.B    #$0F,2(A0)
  9034.     CMP.B    #8,2(A0)
  9035.     BEQ.S    ftuskip
  9036.     SUBQ.B    #1,2(A0)
  9037.     AND.B    #$0F,2(A0)
  9038.     BRA.S    ftuskip
  9039.  
  9040.  
  9041. VolumeGadg
  9042.     MOVE.L    SongDataPtr,A0
  9043.     LEA    12(A0),A0
  9044.     MOVE.W    InsNum,D0
  9045.     BEQ    Return1
  9046.     MULU    #30,D0
  9047.     ADD.L    D0,A0
  9048.     TST.W    UpOrDown
  9049.     BMI.S    VolumeDown
  9050. VolumeUp
  9051.     ADDQ.B    #1,3(A0)
  9052.     BTST    #2,$DFF016
  9053.     BNE.S    voupskp
  9054.     ADD.B    #15,3(A0)
  9055. voupskp    CMP.B    #$40,3(A0)
  9056.     BLS.S    ftuskip
  9057.     MOVE.B    #$40,3(A0)
  9058.     BRA.S    ftuskip
  9059.  
  9060. VolumeDown
  9061.     SUBQ.B    #1,3(A0)
  9062.     BTST    #2,$DFF016
  9063.     BNE.S    vodoskp
  9064.     SUB.B    #15,3(A0)
  9065. vodoskp    TST.B    3(A0)
  9066.     BPL    ftuskip
  9067.     CLR.B    3(A0)
  9068.     BRA    ftuskip
  9069.  
  9070. SampleLengthGadg
  9071.     MOVE.W    #1,SampleLengthFlag
  9072.     MOVE.L    SongDataPtr,A0
  9073.     LEA    12(A0),A0
  9074.     MOVEQ    #0,D0
  9075.     MOVE.W    InsNum,D0
  9076.     BEQ    ShowSampleInfo
  9077.     MULU    #30,D0
  9078.     ADD.L    D0,A0
  9079.     TST.W    UpOrDown
  9080.     BMI.S    SampleLengthDown
  9081. SampleLengthUp
  9082.     ADDQ.W    #1,(A0)
  9083.     BTST    #2,$DFF016
  9084.     BNE.S    sluskip
  9085.     CMP.W    #$7FF0,(A0)
  9086.     BHS.S    sluskip
  9087.     ADDQ.W    #7,(A0)
  9088. sluskip    CMP.W    #$7FFF,(A0)
  9089.     BLO    ShowSampleInfo
  9090.     MOVE.W    #$7FFF,(A0)
  9091.     BRA    ShowSampleInfo
  9092.  
  9093. SampleLengthDown
  9094.     MOVE.W    4(A0),D0
  9095.     ADD.W    6(A0),D0
  9096.     SUBQ.W    #1,(A0)
  9097.     BTST    #2,$DFF016
  9098.     BNE.S    sldskip
  9099.     SUBQ.W    #7,(A0)
  9100. sldskip    BMI.S    sldskip2
  9101.     CMP.W    (A0),D0
  9102.     BLS    ShowSampleInfo
  9103.     MOVE.W    D0,(A0)
  9104.     BRA    ShowSampleInfo
  9105. sldskip2
  9106.     CLR.W    (A0)
  9107.     BRA    ShowSampleInfo
  9108.  
  9109. SampleLengthFlag dc.w 0
  9110.  
  9111. CheckSampleLength
  9112.     TST.W    SampleLengthFlag
  9113.     BEQ    Return1
  9114.     CLR.W    SampleLengthFlag
  9115.     MOVEQ    #0,D0
  9116.     MOVE.W    InsNum,D0
  9117.     BEQ    Return1
  9118.     MOVE.L    SongDataPtr,A0
  9119.     LEA    12(A0),A0
  9120.     MOVE.L    D0,D1
  9121.     LSL.W    #2,D1
  9122.     MULU    #30,D0
  9123.     ADD.L    D0,A0
  9124.     LEA    SamplePtrs,A1
  9125.     LEA    (A1,D1.W),A1
  9126.     MOVE.L    A0,PlaySamPtr
  9127.     MOVE.L    A1,RealSamPtr
  9128.     MOVE.L    124(A1),D0
  9129.     LSR.L    #1,D0
  9130.     MOVE.W    (A0),D1
  9131.     CMP.W    D0,D1
  9132.     BHI.S    ItsTooMuch
  9133.     RTS
  9134.  
  9135. ItsTooMuch
  9136.     LEA    AddWorkSpaceText(PC),A0
  9137.     BSR    AreYouSure
  9138.     BNE.S    RestoreLength
  9139.     BSR    TurnOffVoices
  9140.     MOVE.L    PlaySamPtr,A0
  9141.     MOVEQ    #0,D0
  9142.     MOVE.W    (A0),D0
  9143.     LSL.L    #1,D0
  9144.     MOVE.L    D0,SamAllocLen
  9145.     MOVE.L    #MEMF_CHIP!MEMF_CLEAR,D1
  9146.     MOVE.L    4.W,A6
  9147.     JSR    LVOAllocMem(A6)
  9148.     MOVE.L    D0,SamAllocPtr
  9149.     BEQ.S    RestoreLength
  9150.     MOVE.L    D0,A1
  9151.     MOVE.L    RealSamPtr,A0
  9152.     MOVE.L    (A0),D0
  9153.     BEQ.S    nosamth
  9154.     MOVE.L    D0,A2
  9155.     MOVE.L    124(A0),D1
  9156.     BEQ.S    nosamth
  9157.     SUBQ.L    #1,D1
  9158. cpsalop    MOVE.B    (A2)+,(A1)+
  9159.     DBRA    D1,cpsalop
  9160.     MOVE.L    (A0),A1
  9161.     MOVE.L    124(A0),D0
  9162.     MOVE.L    4.W,A6
  9163.     JSR    LVOFreeMem(A6)
  9164. nosamth    MOVE.L    RealSamPtr,A0
  9165.     MOVE.L    SamAllocPtr,(A0)
  9166.     MOVE.L    SamAllocLen,124(A0)
  9167.     BSR    ShowSampleInfo
  9168.     BSR    RedrawSample
  9169.     BRA    WaitForButtonUp
  9170.  
  9171. RestoreLength
  9172.     MOVE.L    PlaySamPtr,A0
  9173.     MOVE.L    RealSamPtr,A1
  9174.     MOVE.L    124(A1),D0
  9175.     LSR.L    #1,D0
  9176.     MOVE.W    D0,(A0)
  9177.     BRA    ShowSampleInfo
  9178.  
  9179. AddWorkSpaceText dc.b 'add workspace ?',0
  9180. PlaySamPtr  dc.l 0
  9181. RealSamPtr  dc.l 0
  9182. SamAllocPtr dc.l 0
  9183. SamAllocLen dc.l 0
  9184.  
  9185. RepeatGadg
  9186.     MOVE.L    SongDataPtr,A0
  9187.     LEA    12(A0),A0
  9188.     MOVEQ    #0,D0
  9189.     MOVE.W    InsNum,D0
  9190.     BEQ    ShowSampleInfo
  9191.     MULU    #30,D0
  9192.     ADD.L    D0,A0
  9193.     TST.W    UpOrDown
  9194.     BMI.S    RepeatDown
  9195. RepeatUp
  9196.     ADDQ.W    #1,4(A0)
  9197.     BTST    #2,$DFF016
  9198.     BNE.S    ruskip
  9199.     ADDQ.W    #7,4(A0)
  9200. ruskip    MOVE.W    (A0),D0        ;   Length
  9201.     BEQ.S    ruskip2
  9202.     SUB.W    6(A0),D0    ; - RepLen
  9203.     CMP.W    4(A0),D0
  9204.     BHI.S    ruskip2
  9205.     MOVE.W    D0,4(A0)
  9206. ruskip2    BSR    ShowSampleInfo
  9207.     BSR    UpdateRepeats
  9208.     BRA    SetLoopSprites2
  9209.  
  9210. RepeatDown
  9211.     SUBQ.W    #1,4(A0)
  9212.     BTST    #2,$DFF016
  9213.     BNE.S    rdskip
  9214.     SUBQ.W    #7,4(A0)
  9215. rdskip    TST.W    4(A0)
  9216.     BPL.S    ruskip2
  9217.     CLR.W    4(A0)
  9218.     BRA.S    ruskip2
  9219.  
  9220.  
  9221. RepLenGadg
  9222.     MOVE.L    SongDataPtr,A0
  9223.     LEA    12(A0),A0
  9224.     MOVEQ    #0,D0
  9225.     MOVE.W    InsNum,D0
  9226.     BEQ    ShowSampleInfo
  9227.     MULU    #30,D0
  9228.     ADD.L    D0,A0
  9229.     TST.W    UpOrDown
  9230.     BMI.S    RepLenDown
  9231. RepLenUp
  9232.     ADDQ.W    #1,6(A0)
  9233.     BTST    #2,$DFF016    ; Check Right Mousebutton
  9234.     BNE.S    rluskip
  9235.     ADDQ.W    #7,6(A0)
  9236. rluskip    MOVE.W    (A0),D0
  9237.     BEQ.S    ruskip2
  9238.     SUB.W    4(A0),D0
  9239.     CMP.W    6(A0),D0
  9240.     BHI.S    ruskip2
  9241.     BRA.S    rldskip
  9242.  
  9243. RepLenDown
  9244.     MOVEQ    #0,D0
  9245.     MOVE.W    6(A0),D0
  9246.     SUBQ.L    #1,D0
  9247.     BTST    #2,$DFF016
  9248.     BNE.S    rldskip
  9249.     SUBQ.L    #7,D0
  9250. rldskip    CMP.L    #1,D0
  9251.     BGE.S    rldskp2
  9252.     MOVEQ    #1,D0
  9253. rldskp2    MOVE.W    D0,6(A0)
  9254.     BRA    ruskip2
  9255.  
  9256. Wait_4000
  9257.     MOVE.W    #$4000,D0
  9258.     TST.B    HHFlag
  9259.     BEQ.S    wl_loop
  9260.     MOVE.W    #$FFFF,D0
  9261. wl_lop1    DBRA    D0,wl_lop1
  9262.     MOVE.W    #$A000,D0
  9263. wl_loop    DBRA    D0,wl_loop
  9264.     RTS
  9265.  
  9266. UpdateRepeats
  9267.     LEA    audchan1temp,A1
  9268.     LEA    $DFF0A0,A2
  9269.     LEA    ScopeInfo,A3
  9270.     BSR.S    upre2
  9271.     LEA    audchan2temp,A1
  9272.     LEA    $DFF0B0,A2
  9273.     LEA    ScopeInfo+20,A3
  9274.     BSR.S    upre2
  9275.     LEA    audchan3temp,A1
  9276.     LEA    $DFF0C0,A2
  9277.     LEA    ScopeInfo+40,A3
  9278.     BSR.S    upre2
  9279.     LEA    audchan4temp,A1
  9280.     LEA    $DFF0D0,A2
  9281.     LEA    ScopeInfo+60,A3
  9282. upre2    MOVE.W    InsNum,D0
  9283.     CMP.B    n_samplenum(A1),D0
  9284.     BNE    Return1
  9285.     MOVE.L    n_start(A1),A1
  9286.     MOVEQ    #0,D0
  9287.     MOVE.W    4(A0),D0    ; repeat
  9288.     ADD.L    D0,A1
  9289.     ADD.L    D0,A1
  9290.     MOVE.L    A1,(A2)
  9291.     MOVE.W    6(A0),D0
  9292.     MOVE.W    D0,4(A2)    ; replen
  9293.     MOVE.L    A1,ns_repeatptr(A3)
  9294.     ADD.L    D0,A1
  9295.     ADD.L    D0,A1
  9296.     MOVE.L    A1,ns_rependptr(A3)
  9297.     RTS
  9298.  
  9299. SetPatternPos
  9300.     MOVE.L    PatternPosition,D0
  9301.     LSR.L    #4,D0
  9302.     BRA.S    ssppskip
  9303.  
  9304. SetScrPatternPos
  9305.     MOVE.W    ScrPattPos,D0
  9306. ssppskip
  9307.     TST.W    SamScrEnable
  9308.     BNE    Return1
  9309.     MOVE.W    D0,PlayFromPos
  9310.     MULU    #7*40,D0
  9311.     MOVE.L    TextBplPtr,A0
  9312.     LEA    $15B8(A0),A0
  9313.     ADD.L    A0,D0
  9314.     MOVE.L    CopListBpl4Ptr(PC),A1
  9315.     MOVE.W    D0,6(A1)
  9316.     SWAP    D0
  9317.     MOVE.W    D0,2(A1)
  9318.     RTS
  9319.  
  9320. PlayFromPos    dc.w 0
  9321.  
  9322. WantedPattGadg
  9323.     TST.W    SamScrEnable
  9324.     BNE    CheckSamGadgets
  9325. TypeInWantedPatt
  9326.     CMP.W    #138,D1
  9327.     BHI.S    tiwp2
  9328.     CMP.W    #25,D0
  9329.     BHI    TempoGadg
  9330. tiwp2    CMP.L    #'patp',RunMode    ; not if a song is playing... 
  9331.     BEQ    Return1
  9332.     CLR.B    RawKeyCode
  9333.     MOVE.W    #12,LineCurX
  9334.     MOVE.W    #$0086,LineCurY
  9335.     MOVE.W    #5121,TextOffset
  9336.     BSR    GetDecByte
  9337.     TST.W    AbortDecFlag
  9338.     BNE.S    twexit
  9339.     MOVE.B    D0,PatternNumber+3
  9340.     CMP.L    #63,PatternNumber
  9341.     BLS.S    twexit
  9342.     MOVE.L    #63,PatternNumber
  9343. twexit    BRA    RedrawPattern
  9344.  
  9345. GetKey0_9
  9346.     BTST    #2,$DFF016
  9347.     BEQ.S    gk_ret
  9348.     MOVEQ    #0,D0
  9349.     BSR    DoKeyBuffer
  9350.     MOVE.B    RawKeyCode,D0
  9351.     BEQ.S    GetKey0_9
  9352.     CLR.B    RawKeyCode
  9353.     CMP.B    #68,D0
  9354.     BEQ.S    gk_ret
  9355.     CMP.B    #69,D0
  9356.     BEQ.S    gk_ret
  9357.     CMP.B    #10,D0
  9358.     BEQ.S    gk_end
  9359.     BHI.S    GetKey0_9
  9360.     CMP.B    #1,D0
  9361.     BLO.S    GetKey0_9
  9362.     MOVE.L    D0,D1
  9363.     RTS
  9364.  
  9365. gk_end    MOVEQ    #0,D1
  9366.     RTS
  9367.  
  9368. gk_ret    MOVEQ    #68,D1
  9369.     RTS
  9370.  
  9371. ShowOneDigit
  9372.     ADD.B    #'0',D1
  9373.     MOVE.B    D1,NumberText
  9374.     CLR.W    D1
  9375.     SWAP    D1
  9376.     MOVE.W    #1,TextLength
  9377.     MOVE.L    #NumberText,ShowTextPtr
  9378.     BSR    ShowText
  9379.     CLR.L    NumberText
  9380.     CLR.W    WordNumber
  9381.     RTS
  9382.  
  9383. ;---- Get Text Line ----
  9384.  
  9385. GetTextLine
  9386.     MOVEQ    #0,D0
  9387.     MOVE.W    A4,D0
  9388.     DIVU    #40,D0
  9389.     ADDQ.W    #5,D0
  9390.     MOVE.W    D0,LineCurY
  9391.     SWAP    D0
  9392.     LSL.W    #3,D0
  9393.     ADDQ.W    #4,D0
  9394.     MOVE.W    D0,LineCurX
  9395.     BSR    UpdateLineCurPos
  9396.     MOVE.L    ShowTextPtr,DSTPtr
  9397.     CLR.L    DSTOffset
  9398.     CLR.L    DSTPos
  9399.     MOVE.W    #1,GetLineFlag
  9400.     MOVE.L    A4,A5
  9401.     MOVE.W    LineCurX,D5
  9402.     CLR.B    RawKeyCode
  9403.     BSR    UpdateText
  9404. WaitForKey
  9405.     BTST    #2,$DFF016
  9406.     BEQ    AbortGetLine
  9407.     BTST    #6,$BFE001
  9408.     BEQ    LineClicked
  9409.     BSR    DoKeyBuffer
  9410.     MOVEQ    #0,D1
  9411.     MOVE.B    RawKeyCode,D1
  9412.     BEQ.S    WaitForKey
  9413.     CMP.B    #78,D1
  9414.     BEQ    MoveCharRight
  9415.     CMP.B    #79,D1
  9416.     BEQ    MoveCharLeft
  9417.     CMP.B    #70,D1
  9418.     BEQ    DeleteChar
  9419.     CMP.B    #65,D1
  9420.     BEQ    BackspaceChar
  9421.     CMP.B    #68,D1
  9422.     BEQ    GetLineReturn
  9423.     CMP.B    #69,D1
  9424.     BEQ    GetLineReturn
  9425.     BTST    #7,D1
  9426.     BNE.S    WaitForKey
  9427.     LEA    UnshiftedKeymap,A4
  9428.     TST.W    ShiftKeyStatus
  9429.     BEQ.S    gtlskip
  9430.     LEA    ShiftedKeymap,A4
  9431. gtlskip    AND.W    #$007F,D1
  9432.     CMP.B    #64,D1
  9433.     BHI.S    WaitForKey
  9434.     MOVE.B    (A4,D1.W),D1
  9435.     BEQ.S    WaitForKey
  9436.     TST.B    EnterTextFlag
  9437.     BEQ.S    TextLineKey
  9438.     CMP.B    #'0',D1
  9439.     BLO    WaitForKey
  9440.     CMP.B    #'f',D1
  9441.     BHI    WaitForKey
  9442.     CMP.B    #'a',D1
  9443.     BHS.S    TextLineKey
  9444.     CMP.B    #'9',D1
  9445.     BHI    WaitForKey
  9446. TextLineKey
  9447.     CMP.L    TextEndPtr,A6
  9448.     BEQ    WaitForKey
  9449.     MOVE.L    TextEndPtr,A4
  9450. tlkloop    MOVE.B    -(A4),1(A4)
  9451.     CMP.L    A4,A6
  9452.     BNE.S    tlkloop
  9453.     MOVE.L    TextEndPtr,A4
  9454.     CLR.B    (A4)
  9455.     MOVE.B    D1,(A6)+
  9456.     BSR    PosMoveRight
  9457.     BSR    UpdateText
  9458.     CLR.B    RawKeyCode
  9459.     BRA    WaitForKey
  9460.  
  9461. LineClicked
  9462.     MOVE.W    MouseY,D1
  9463.     SUB.W    LineCurY,D1
  9464.     CMP.W    #2,D1
  9465.     BGT    GetLineReturn
  9466.     CMP.W    #-8,D1
  9467.     BLT    GetLineReturn
  9468.     MOVE.W    MouseX,D1
  9469.     SUB.W    LineCurX,D1
  9470.     ADDQ.W    #4,D1
  9471.     ASR.W    #3,D1
  9472.     BEQ    WaitForKey
  9473.     BPL.S    linclri
  9474.  
  9475.     CMP.L    DSTPtr(PC),A6
  9476.     BEQ    WaitForKey
  9477.     SUBQ.L    #1,A6
  9478.     BSR    PosMoveLeft
  9479. upwake2    BSR    UpdateText
  9480.     BRA    WaitForKey
  9481.  
  9482. linclri    CMP.L    TextEndPtr,A6
  9483.     BEQ    WaitForKey
  9484.     TST.B    (A6)
  9485.     BEQ    WaitForKey
  9486.     ADDQ.L    #1,A6
  9487.     BSR    PosMoveRight
  9488.     BRA.S    upwake2
  9489.  
  9490. PosMoveRight
  9491.     MOVE.L    DSTPos,D0
  9492.     MOVEQ    #0,D1
  9493.     MOVE.W    TextLength,D1
  9494.     TST.B    EnterTextFlag
  9495.     BNE.S    pmrskip
  9496.     SUBQ.W    #1,D1
  9497. pmrskip    CMP.L    D1,D0
  9498.     BLO.S    posrok
  9499.     ADDQ.L    #1,DSTOffset
  9500.     BRA    UpdateLineCurPos
  9501. posrok    ADDQ.L    #1,DSTPos
  9502.     ADDQ.W    #8,LineCurX
  9503.     BRA    UpdateLineCurPos
  9504.  
  9505. PosMoveLeft
  9506.     TST.L    DSTPos
  9507.     BNE.S    poslok
  9508.     SUBQ.L    #1,DSTOffset
  9509.     BRA    UpdateLineCurPos    
  9510. poslok    SUBQ.L    #1,DSTPos
  9511.     SUBQ.W    #8,LineCurX
  9512.     BRA    UpdateLineCurPos
  9513.  
  9514. BackspaceChar
  9515.     CMP.L    DSTPtr(PC),A6
  9516.     BEQ    WaitForKey
  9517.     SUBQ.L    #1,A6
  9518.     MOVE.L    A6,A4
  9519. dobaloop
  9520.     MOVE.B    1(A4),(A4)+
  9521.     CMP.L    TextEndPtr,A4
  9522.     BNE.S    dobaloop
  9523.     BSR    PosMoveLeft
  9524. upwake    BSR    UpdateText
  9525.     BSR    Wait_4000
  9526.     BSR    Wait_4000
  9527.     BSR    Wait_4000
  9528.     BRA    WaitForKey
  9529.  
  9530. DeleteChar
  9531.     MOVE.L    A6,A4
  9532. dechloop
  9533.     MOVE.B    1(A4),(A4)+
  9534.     CMP.L    TextEndPtr,A4
  9535.     BLO.S    dechloop
  9536.     BRA.S    upwake
  9537.  
  9538. MoveCharRight
  9539.     CMP.L    TextEndPtr,A6
  9540.     BEQ    WaitForKey
  9541.     TST.B    (A6)
  9542.     BEQ    WaitForKey
  9543.     ADDQ.L    #1,A6
  9544.     BSR    PosMoveRight
  9545.     BRA.S    upwake
  9546.  
  9547. MoveCharLeft
  9548.     CMP.L    DSTPtr(PC),A6
  9549.     BEQ    WaitForKey
  9550.     SUBQ.L    #1,A6
  9551.     BSR    PosMoveLeft
  9552.     BRA.S    upwake
  9553.  
  9554. GetLineReturn
  9555.     MOVE.L    DSTPtr,A6
  9556.     CMP.B    #1,EnterTextFlag
  9557.     BNE.S    gtl_rskip
  9558.     TST.B    DiskNumText2
  9559.     BEQ    WaitForKey
  9560. gtl_rskip
  9561.     CMP.B    #3,EnterTextFlag
  9562.     BNE.S    gtl_rskip2
  9563.     TST.B    SndDiskNum1
  9564.     BEQ    WaitForKey
  9565. gtl_rskip2
  9566.     MOVE.L    A6,A4
  9567. dlrloop    TST.B    (A4)+
  9568.     BNE.S    dlrloop
  9569.     SUBQ.L    #1,A4
  9570. dlrloop2
  9571.     CMP.L    TextEndPtr,A4
  9572.     BHS.S    dlrexit
  9573.     CLR.B    (A4)+
  9574.     BRA.S    dlrloop2
  9575.  
  9576. dlrexit    CLR.W    LineCurX
  9577.     MOVE.W    #270,LineCurY
  9578.     BSR    UpdateLineCurPos
  9579.     CLR.W    GetLineFlag
  9580.     MOVE.B    RawKeyCode,MixChar
  9581.     CLR.B    RawKeyCode
  9582.     CLR.L    DSTOffset
  9583.     BSR.S    UpdateText
  9584.     BRA    WaitForButtonUp
  9585.  
  9586. AbortGetLine
  9587.     MOVE.L    DSTPtr,A6
  9588.     MOVE.L    A6,A4
  9589. clliloop
  9590.     CLR.B    (A4)+
  9591.     CMP.L    TextEndPtr,A4
  9592.     BNE.S    clliloop
  9593.     BSR.S    UpdateText
  9594.     BRA    GetLineReturn
  9595.  
  9596. UpdateText
  9597.     MOVE.W    A5,TextOffset
  9598.     MOVE.L    DSTPtr,A0
  9599.     ADD.L    DSTOffset,A0
  9600.     BRA    ShowText2
  9601.  
  9602. DSTPtr        dc.l    0
  9603. DSTPos        dc.l    0
  9604. DSTOffset    dc.l    0
  9605.  
  9606. ;----
  9607.  
  9608. TypeInSongName
  9609.     BSR    StorePtrCol
  9610.     BSR    SetWaitPtrCol
  9611.     CLR.L    EditMode
  9612.     MOVE.L    SongDataPtr,A6
  9613.     MOVE.L    A6,TextEndPtr
  9614.     MOVE.L    A6,ShowTextPtr
  9615.     ADD.L    #19,TextEndPtr
  9616.     MOVE.W    #20,TextLength
  9617.     MOVE.W    #4133,A4
  9618.     BSR    GetTextLine
  9619.     CLR.L    TextEndPtr
  9620.     BRA    RestorePtrCol
  9621.  
  9622. CheckSmplNamOrLoad
  9623.     CMP.W    #287,MouseX2
  9624.     BHS    LoadNamedSample
  9625. TypeInSampleName
  9626.     BSR    StorePtrCol
  9627.     BSR    SetWaitPtrCol
  9628.     CLR.L    EditMode
  9629.     MOVE.L    SongDataPtr,A6
  9630.     LEA    -10(A6),A6
  9631.     MOVE.W    InsNum,D7
  9632.     BNE.S    tisnskip
  9633.     MOVE.W    LastInsNum,D7
  9634. tisnskip
  9635.     MULU    #30,D7
  9636.     ADD.L    D7,A6
  9637.     MOVE.L    A6,TextEndPtr
  9638.     MOVE.L    A6,ShowTextPtr
  9639.     ADD.L    #21,TextEndPtr
  9640.     MOVE.W    #22,TextLength
  9641.     MOVE.W    #4573,A4
  9642.     BSR    GetTextLine
  9643.     CLR.L    TextEndPtr
  9644.     BRA    RestorePtrCol
  9645.  
  9646. LoadSample
  9647.     TST.W    InsNum
  9648.     BEQ    NotSampleNull
  9649.     BSR    StorePtrCol
  9650.     LEA    SamplePath2,A0
  9651.     BSR    CopyPath
  9652.     LEA    DirInputName,A0
  9653.     MOVEQ    #DirNameLength-1,D0
  9654. lsloop    MOVE.B    (A0)+,(A1)+
  9655.     DBRA    D0,lsloop
  9656.     MOVE.L    SongDataPtr,A0
  9657.     MOVE.W    InsNum,D0
  9658.     MULU    #30,D0
  9659.     LEA    -10(A0),A0
  9660.     ADD.L    D0,A0
  9661.     LEA    DirInputName,A1
  9662.     MOVEQ    #21,D0
  9663. lsloop2    MOVE.B    (A1)+,(A0)+
  9664.     DBRA    D0,lsloop2
  9665.     BSR    SetDiskPtrCol
  9666.     MOVE.L    #FileName,D1
  9667.     BSR    ExamineAndAlloc
  9668.     BEQ    ErrorRestoreCol
  9669.     MOVE.L    #FileName,D1
  9670.     BRA    lnssec2
  9671.  
  9672. CheckForIFF2 ; load loop
  9673.     MOVEQ    #-1,D2
  9674.     BRA.S    ciff2
  9675. CheckForIFF
  9676.     MOVEQ    #0,D2
  9677. ciff2    MOVEQ    #0,D1
  9678.     CMP.L    #'FORM',(A0)
  9679.     BNE.S    wiskip
  9680.     CMP.L    #'8SVX',8(A0)
  9681.     BNE.S    wiskip
  9682.     MOVE.L    A0,A2
  9683.     MOVE.L    A1,D0
  9684.     ADD.L    A0,A1
  9685.     TST.L    D2
  9686.     BEQ.S    cfiloop
  9687.     BSR.S    CheckIFFLoop
  9688. cfiloop    CMP.L    #'BODY',(A0)
  9689.     BEQ.S    wasiff
  9690.     ADDQ.L    #2,A0
  9691.     CMP.L    A1,A0
  9692.     BLS.S    cfiloop
  9693.     RTS
  9694.  
  9695. WasIFF    ADDQ.L    #8,A0
  9696.     ADD.L    A2,D0
  9697.     SUB.L    A0,D0
  9698. wiloop    MOVE.B    (A0)+,(A2)+
  9699.     CMP.L    A1,A0
  9700.     BLS.S    wiloop
  9701.     MOVE.L    SampleInstrSave(PC),A3
  9702.     LSR.W    #1,D0
  9703.     MOVE.W    22(A3),D1
  9704.     SUB.W    D0,D1
  9705.     MOVE.W    D0,22(A3)
  9706. wiskip    LEA    SampleLengthAdd(PC),A3
  9707.     MOVE.W    InsNum,D0
  9708.     LSL.W    #1,D0
  9709.     MOVE.W    D1,(A3,D0.W)
  9710.     RTS
  9711.  
  9712. CheckIFFLoop
  9713.     TST.B    IFFLoopFlag
  9714.     BEQ    Return2
  9715.     MOVEM.L    A0/D0,-(SP)
  9716. cilloop    CMP.L    #'VHDR',(A0)
  9717.     BEQ.S    wasvhdr
  9718.     ADDQ.L    #2,A0
  9719.     CMP.L    A1,A0
  9720.     BLS.S    cilloop
  9721. cilend    MOVEM.L    (SP)+,A0/D0
  9722.     RTS
  9723.  
  9724. wasvhdr    MOVE.L    SampleInstrSave(PC),A3
  9725.     MOVE.L    12(A0),D0
  9726.     BEQ.S    cilend
  9727.     LSR.W    #1,D0
  9728.     MOVE.W    D0,28(A3)
  9729.     MOVE.L    8(A0),D0
  9730.     BNE.S    wsvhdr2
  9731.     MOVEQ    #2,D0
  9732. wsvhdr2    LSR.W    #1,D0
  9733.     MOVE.W    D0,26(A3)
  9734.     BRA.S    cilend
  9735.  
  9736.  
  9737. SampleInstrSave    dc.l    0
  9738. SampleLengthAdd    dcb.w    32,0
  9739.  
  9740. ExamineAndAlloc
  9741.     MOVEQ    #-2,D2
  9742.     MOVE.L    DOSBase,A6
  9743.     JSR    LVOLock(A6)
  9744.     MOVE.L    D0,FileLock
  9745.     BEQ    CantFindFile
  9746.     MOVE.L    D0,D1
  9747.     MOVE.L    #FileInfoBlock,D2
  9748.     JSR    LVOExamine(A6)
  9749.     TST.L    FIB_EntryType
  9750.     BPL    CantExamFile
  9751.     MOVE.L    FileLock,D1
  9752.     JSR    LVOUnLock(A6)
  9753.     MOVE.L    FIB_FileSize,D0
  9754.     BEQ    FileIsEmpty
  9755.     BSR    TurnOffVoices
  9756.     BSR    FreeSample
  9757.     MOVE.L    FIB_FileSize,D0
  9758.     CMP.L    #$FFFE,D0
  9759.     BLS.S    exalloc
  9760.     MOVE.L    #$FFFE,D0
  9761. exalloc    LEA    SamplePtrs,A4
  9762.     MOVE.W    InsNum(PC),D1
  9763.     LSL.W    #2,D1
  9764.     ADD.W    D1,A4
  9765.     MOVE.L    D0,124(A4)
  9766.     MOVE.L    D0,DiskDataLength
  9767.     MOVE.L    4.W,A6
  9768.     MOVE.L    #MEMF_CHIP!MEMF_CLEAR,D1
  9769.     JSR    LVOAllocMem(A6)
  9770.     MOVE.L    D0,DiskDataPtr
  9771.     MOVE.L    D0,(A4)
  9772.     BEQ    OutOfMemErr
  9773.     LEA    LoadingSampleText(PC),A0
  9774.     BSR    ShowStatusText
  9775.     MOVE.L    SongDataPtr,A0
  9776.     MOVE.W    InsNum(PC),D0
  9777.     MULU    #30,D0
  9778.     LEA    -10(A0),A0
  9779.     ADD.L    D0,A0
  9780.     MOVE.L    A0,SampleInstrSave
  9781.     MOVE.L    DiskDataLength,D0
  9782.     LSR.L    #1,D0
  9783.     MOVE.W    D0,22(A0)
  9784.     MOVE.L    #$00400000,24(A0)
  9785.     MOVE.W    #1,28(A0)
  9786.     BSR    ShowSampleInfo
  9787.     MOVEQ    #-1,D0
  9788.     RTS
  9789.  
  9790. LoadNamedSample
  9791.     TST.W    InsNum
  9792.     BEQ    NotSampleNull
  9793.     BSR    StorePtrCol
  9794.     BSR    CreateSampleName
  9795.     BSR    SetDiskPtrCol
  9796.     MOVE.L    FileNamePtr,D1
  9797.     BSR    ExamineAndAlloc
  9798.     BEQ    Return2
  9799.     MOVE.L    FileNamePtr,D1
  9800. lnssec2    MOVE.L    DOSbase(PC),A6
  9801.     MOVE.L    #1005,D2
  9802.     JSR    LVOOpen(A6)
  9803.     MOVE.L    D0,D7
  9804.     BEQ    CantOpenFile
  9805.     MOVE.L    D0,D1
  9806.     MOVE.L    DiskDataPtr(PC),D2
  9807.     MOVE.L    DiskDataLength(PC),D3
  9808.     JSR    LVORead(A6)
  9809.     MOVE.L    D7,D1
  9810.     JSR    LVOClose(A6)
  9811.     MOVE.L    DiskDataPtr(PC),A0
  9812.     MOVE.L    DiskDataLength(PC),A1
  9813.     BSR    CheckForIFF2
  9814.     BSR    ValidateLoops
  9815.     BSR    ShowSampleInfo
  9816.     MOVE.L    DiskDataPtr(PC),A0
  9817.     CLR.W    (A0)
  9818.     BSR    RedrawSample
  9819.     BSR    ShowAllRight
  9820.     BRA    RestorePtrCol
  9821.  
  9822. CreateSampleName
  9823.     LEA    SampleFileName,A0
  9824.     MOVEQ    #27,D0
  9825. csnloop    CLR.B    (A0)+
  9826.     DBRA    D0,csnloop
  9827.     MOVE.L    SongDataPtr(PC),A0
  9828.     MOVE.W    InsNum(PC),D0
  9829.     MULU    #30,D0
  9830.     LEA    -10(A0),A0
  9831.     ADD.L    D0,A0
  9832.     MOVE.L    A0,SampleInstrSave
  9833.     MOVEQ    #0,D0
  9834.     MOVE.W    22(A0),D0
  9835.     ADD.L    D0,D0
  9836.     MOVE.L    D0,DiskDataLength
  9837.     MOVE.L    D0,IFFBODY+4
  9838.     ADD.L    #IFFEND-IFFFORM-8,D0
  9839.     MOVE.L    D0,IFFFORM+4
  9840.  
  9841.     MOVEQ    #0,D0
  9842.     MOVE.W    22(A0),D0
  9843.     ADD.L    D0,D0
  9844.     MOVEQ    #0,D1
  9845.     MOVE.W    28(A0),D1
  9846.     CMP.W    #1,D1
  9847.     BLS.S    csnskp2
  9848.     ADD.L    D1,D1
  9849.     MOVEQ    #0,D0
  9850.     MOVE.W    26(A0),D0
  9851.     ADD.L    D0,D0
  9852.     BRA.S    csnskp3
  9853. csnskp2    MOVEQ    #0,D1
  9854. csnskp3    MOVE.L    D0,IFFVHDR+8
  9855.     MOVE.L    D1,IFFVHDR+12
  9856.  
  9857.     LEA    SampleFileName,A1
  9858.     LEA    IFFNAME+8,A2
  9859.     MOVEQ    #21,D0
  9860. csnloop2
  9861.     MOVE.B    (A0),(A1)+
  9862.     MOVE.B    (A0)+,(A2)+
  9863.     DBRA    D0,csnloop2
  9864.     MOVE.L    #SampleFileName,D1
  9865.     MOVE.L    D1,FileNamePtr
  9866.     BSR.S    FindColon
  9867.     BEQ.S    CheckOverride
  9868.     LEA    SamplePath2,A0
  9869.     BSR    CopyPath
  9870.     MOVE.L    #SampleFileName,A0
  9871. csnloop3
  9872.     MOVE.B    (A0)+,(A1)+
  9873.     BNE.S    csnloop3
  9874.     MOVE.L    #FileName,FileNamePtr
  9875.     RTS
  9876.  
  9877. FindColon
  9878.     MOVE.L    D1,A0
  9879. fcloop    MOVE.B    (A0)+,D0
  9880.     BEQ.S    FindColonFail
  9881.     CMP.B    #':',D0
  9882.     BEQ.S    FindColonSuccess
  9883.     BRA.S    fcloop
  9884.  
  9885. FindColonFail
  9886.     MOVEQ    #-1,D0
  9887.     RTS
  9888.  
  9889. FindColonSuccess
  9890.     MOVEQ    #0,D0
  9891.     RTS
  9892.  
  9893. CheckOverride
  9894.     TST.B    OverrideFlag
  9895.     BEQ    Return2
  9896.     MOVE.L    #SampleFileName,A0
  9897.     MOVE.L    A0,A1
  9898.     LEA    21(A1),A1
  9899.     MOVE.L    A1,A2
  9900. chkovlp    MOVE.B    -(A1),D0
  9901.     CMP.B    #':',D0
  9902.     BEQ.S    chkovok
  9903.     CMP.B    #'/',D0
  9904.     BEQ.S    chkovok
  9905.     MOVE.L    A1,A2
  9906.     CMP.L    A0,A1
  9907.     BHI.S    chkovlp
  9908. chkovok    LEA    SamplePath2,A0
  9909.     BSR    CopyPath
  9910. chkovl2    MOVE.B    (A2)+,(A1)+
  9911.     BNE.S    chkovl2
  9912.     MOVE.L    #FileName,FileNamePtr
  9913.     RTS
  9914.  
  9915. ValidateLoops
  9916.     MOVE.L    SongDataPtr(PC),A0
  9917.     LEA    20(A0),A0
  9918.     MOVEQ    #30,D0
  9919. valolop    MOVE.W    22(A0),D1
  9920.     MOVE.W    26(A0),D2
  9921.     MOVE.W    28(A0),D3
  9922.     CMP.W    D1,D2
  9923.     BHS.S    valosk1
  9924.     ADD.W    D2,D3
  9925.     CMP.W    D1,D3
  9926.     BHI.S    valosk2
  9927. valoque    TST.W    28(A0)
  9928.     BNE.S    valosk3
  9929.     MOVE.W    #1,28(A0)
  9930. valosk3    LEA    30(A0),A0
  9931.     DBRA    D0,valolop
  9932.     RTS
  9933. valosk2    SUB.W    D2,D1
  9934.     MOVE.W    D1,28(A0)
  9935.     BRA.S    valoque
  9936. valosk1    MOVEQ    #1,D1
  9937.     MOVE.L    D1,26(A0)
  9938.     BRA.S    valoque
  9939.  
  9940. LoadPreset
  9941.     CLR.B    RawKeyCode
  9942.     TST.W    InsNum
  9943.     BEQ    NotSampleNull
  9944.     BSR    TurnOffVoices
  9945.     BSR    FreeSample
  9946.     BSR    CreateSampleName
  9947.     MOVE.L    FileNamePtr,A0
  9948.     TST.B    (A0)
  9949.     BEQ    Return2
  9950.     MOVE.L    DiskDataLength(PC),D0
  9951.     BEQ    Return2
  9952.     MOVE.L    DiskDataLength(PC),D0
  9953.     BSR    AllocSample
  9954.     MOVE.L    DiskDataPtr(PC),D0
  9955.     BEQ.S    loprerr
  9956.     BSR    ShowSampleInfo
  9957.     BSR    DoLoadData
  9958.     BSR    ShowAllRight
  9959.     MOVE.L    DiskDataPtr(PC),A0
  9960.     MOVE.L    DiskDataLength(PC),A1
  9961.     BSR    CheckForIFF
  9962.     BSR    ValidateLoops
  9963.     BSR    ShowSampleInfo
  9964.     MOVE.L    DiskDataPtr(PC),A0
  9965.     CLR.W    (A0)
  9966.     BSR    RedrawSample
  9967.     MOVE.W    #1,UpdateFreeMem
  9968.     RTS
  9969.  
  9970. loprerr    BSR    StorePtrCol
  9971.     BSR    OutOfMemErr
  9972.     BSR    RestorePtrCol
  9973.     BRA    RedrawSample
  9974.  
  9975. AllocSample
  9976.     MOVE.L    D0,-(SP)
  9977.     MOVE.L    #MEMF_CHIP!MEMF_CLEAR,D1
  9978.     MOVE.L    4.W,A6
  9979.     JSR    LVOAllocMem(A6)
  9980.     MOVE.L    D0,DiskDataPtr
  9981.     LEA    SamplePtrs(PC),A0
  9982.     MOVE.W    InsNum(PC),D1
  9983.     LSL.W    #2,D1
  9984.     LEA    (A0,D1.W),A0
  9985.     MOVE.L    DiskDataPtr(PC),(A0)
  9986.     MOVE.L    (SP)+,124(A0)
  9987.     RTS
  9988.  
  9989. FreeSample
  9990.     LEA    SamplePtrs(PC),A0
  9991.     MOVE.W    InsNum(PC),D0
  9992.     BEQ    Return2
  9993.     LSL.W    #2,D0
  9994.     LEA    (A0,D0.W),A0
  9995.     MOVE.L    (A0),D1
  9996.     BEQ    Return2
  9997.     CLR.L    (A0)
  9998.     MOVE.L    124(A0),D0
  9999.     CLR.L    124(A0)
  10000.     MOVE.L    D1,A1
  10001.     MOVE.L    4.W,A6
  10002.     JSR    LVOFreeMem(A6)
  10003.     RTS
  10004.  
  10005. NotSampleNull
  10006.     LEA    NotSample0Text(PC),A0
  10007.     BSR    ShowStatusText
  10008.     BRA    SetErrorPtrCol
  10009.  
  10010. NotSample0Text    dc.b 'not sample 0 !',0,0
  10011.  
  10012. ;----
  10013.  
  10014. DeleteSong
  10015.     LEA    DeleteSongText,A0
  10016.     BSR    AreYouSure
  10017.     BNE    Return2
  10018.     LEA    DeletingSongText(PC),A0
  10019.     BSR    ShowStatusText
  10020.     LEA    SongsPath2,A0
  10021.     BSR    CopyPath
  10022.     LEA    DirInputName,A0
  10023.     MOVEQ    #DirNameLength-1,D0
  10024. dsloop    MOVE.B    (A0)+,(A1)+
  10025.     DBRA    D0,dsloop
  10026.     MOVE.W    #1,Action
  10027. Delete3    MOVE.L    #FileName,FileNamePtr
  10028.     MOVE.L    DOSbase(PC),A6
  10029.     MOVE.L    FileNamePtr(PC),D1
  10030.     MOVE.L    D1,A0
  10031.     JSR    LVODeleteFile(A6)
  10032.     BSR    ClearFileNames
  10033.     BSR    ShowAllRight
  10034.     BSR    SetNormalPtrCol
  10035.     BSR    StorePtrCol
  10036.     BRA    DoAutoDir
  10037.     
  10038. DeleteModule
  10039.     LEA    DeleteModuleText,A0
  10040.     BSR    AreYouSure
  10041.     BNE    Return2
  10042.     LEA    DeletingModuleText(PC),A0
  10043.     BSR    ShowStatusText
  10044.     LEA    ModulesPath2,A0
  10045.     BSR    CopyPath
  10046.     LEA    DirInputName,A0
  10047.     MOVEQ    #DirNameLength-1,D0
  10048. dmdloop    MOVE.B    (A0)+,(A1)+
  10049.     DBRA    D0,dmdloop
  10050.     MOVE.W    #3,Action
  10051.     BRA.S    Delete3
  10052.  
  10053. DeleteSample
  10054.     LEA    DeleteSampleText,A0
  10055.     BSR    AreYouSure
  10056.     BNE    Return2
  10057.     LEA    DeletingSampleText(PC),A0
  10058.     BSR    ShowStatusText
  10059.     LEA    SamplePath2,A0
  10060.     BSR    CopyPath
  10061.     LEA    DirInputName,A0
  10062.     MOVEQ    #DirNameLength-1,D0
  10063. dsaloop    MOVE.B    (A0)+,(A1)+
  10064.     DBRA    D0,dsaloop
  10065.     MOVE.W    #5,Action
  10066.     BRA    Delete3
  10067.  
  10068. RenameFile
  10069.     LEA    RenamingFileText(PC),A0
  10070.     BSR    ShowStatusText
  10071.     LEA    DirInputName,A0
  10072.     LEA    NewInputName,A1
  10073.     MOVEQ    #23,D0
  10074. rnfloop    MOVE.B    (A0)+,(A1)+
  10075.     BNE.S    rnfskip
  10076.     SUBQ.L    #1,A0
  10077. rnfskip    DBRA    D0,rnfloop
  10078.     BSR    StorePtrCol
  10079.     BSR    SetWaitPtrCol
  10080.     LEA    NewInputName,A6
  10081.     MOVE.L    A6,ShowTextPtr
  10082.     MOVE.L    A6,TextEndPtr
  10083.     ADD.L    #23,TextEndPtr
  10084.     MOVE.W    #24,TextLength
  10085.     MOVE.W    FileNameScrollPos+2,D0
  10086.     MULU    #240,D0
  10087.     MOVE.W    #1888,A4
  10088.     ADD.W    D0,A4
  10089.     BSR    GetTextLine
  10090.     TST.B    NewInputName
  10091.     BEQ.S    rnfend
  10092.     CMP.B    #69,MixChar
  10093.     BEQ.S    rnfend
  10094.  
  10095.     MOVE.L    PathPtr,A0
  10096.     BSR    CopyPath
  10097.     LEA    NewInputName,A0
  10098.     MOVEQ    #23,D0
  10099. rnfloop2
  10100.     MOVE.B    (A0)+,(A1)+
  10101.     DBRA    D0,rnfloop2
  10102.  
  10103.     LEA    FileName,A0
  10104.     LEA    NewFileName,A1
  10105. rnfloop3
  10106.     MOVE.B    (A0)+,(A1)+
  10107.     BNE.S    rnfloop3
  10108.  
  10109.     MOVE.L    PathPtr,A0
  10110.     BSR    CopyPath
  10111.     LEA    DirInputName,A0
  10112.     MOVEQ    #DirNameLength-1,D0
  10113. rnfloop4
  10114.     MOVE.B    (A0)+,(A1)+
  10115.     DBRA    D0,rnfloop4
  10116.  
  10117.     MOVE.L    #FileName,D1
  10118.     MOVE.L    #NewFileName,D2
  10119.     MOVE.L    DOSbase(PC),A6
  10120.     JSR    LVORename(A6)
  10121.  
  10122. rnfend    BSR    ClearFileNames
  10123.     CLR.W    Action
  10124.     BSR    RestorePtrCol
  10125.     BRA    ShowAllRight
  10126.  
  10127. LoadSong
  10128.     MOVE.W    #1,LoadInProgress
  10129.     BSR    DoClearSong
  10130.     BSR    ClrSampleInfo
  10131.     LEA    SongsPath2,A0
  10132.     BSR    CopyPath
  10133.     LEA    DirInputName,A0
  10134.     MOVEQ    #DirNameLength-1,D0
  10135. losoloop2
  10136.     MOVE.B    (A0)+,(A1)+
  10137.     DBRA    D0,losoloop2
  10138.     MOVE.L    SongDataPtr(PC),DiskDataPtr
  10139.     MOVE.L    #FileName,FileNamePtr
  10140.     MOVE.L    #70716,DiskDataLength
  10141.     LEA    LoadingSongText(PC),A0
  10142.     BSR    ShowStatusText
  10143.     BSR    DoLoadData
  10144.     BEQ    lososkip3
  10145.     MOVE.L    SongDataPtr(PC),A0
  10146.     CMP.L    #'PACK',(A0)
  10147.     BNE.S    lososkip
  10148.     MOVE.L    4(A0),CrunchedSongLength
  10149.     MOVE.L    8(A0),RealSongLength
  10150.     MOVE.L    SongDataPtr(PC),D0
  10151.     ADD.L    #70716,D0
  10152.     SUB.L    RealSongLength(PC),D0
  10153.     MOVE.L    D0,EndOfSongPtr
  10154.     LEA    DecrunchingText(PC),A0
  10155.     BSR    ShowStatusText
  10156.     BSR    Decruncher
  10157.     BSR    ShowAllRight
  10158. lososkip
  10159.     MOVE.L    SongDataPtr(PC),A0
  10160.     CMP.L    #'M.K.',sd_mahokakt(A0)    ;  M.K. again...
  10161.     BEQ.S    lososkip2    
  10162.     BSR    MahoneyAndKaktus ; Was 16 instr, so move up...
  10163. lososkip2
  10164.     LEA    LoadingSongText(PC),A0
  10165.     BSR    ShowStatusText
  10166.     BSR    CheckAbort
  10167.     BEQ.S    lososkip3
  10168.     TST.B    AutoExitFlag
  10169.     BEQ.S    NoSongAutoExit
  10170.     BSR    ExitFromDir
  10171. NoSongAutoExit
  10172.     CLR.L    PatternNumber
  10173.     CLR.L    CurrPos
  10174.     BSR    RedrawPattern
  10175.     CLR.W    ScrPattPos
  10176.     BSR    SetScrPatternPos
  10177.     BSR    SortDisks
  10178.     LEA    SampleSortList(PC),A0
  10179.     MOVEQ    #30,D0
  10180. losoloop3
  10181.     TST.B    NosamplesFlag
  10182.     BNE.S    lososkip3
  10183.     BSR    CheckAbort
  10184.     BEQ.S    lososkip3
  10185.     MOVE.W    InsNum(PC),TuneUp
  10186.     BSR    DoShowFreeMem
  10187.     MOVE.L    (A0)+,D1
  10188.     MOVE.W    D1,InsNum
  10189.     MOVEM.L    D0/D1/A0,-(SP)
  10190.     BSR    LoadPreset
  10191.     BSR    ShowSampleInfo
  10192.     MOVEM.L    (SP)+,D0/D1/A0
  10193.     DBRA    D0,losoloop3
  10194. lososkip3
  10195.     MOVE.W    #1,InsNum
  10196.     MOVE.L    #6,CurrSpeed
  10197.     CLR.W    LoadInProgress
  10198.     BSR    ShowAllRight
  10199.     BSR    SetNormalPtrCol
  10200.     BSR    DoShowFreeMem
  10201.     BSR    CheckInstrLengths
  10202.     BSR    ShowSampleInfo
  10203.     BRA    RedrawSample
  10204.  
  10205. SortDisks
  10206.     MOVEM.L    D0-D4/A0-A1,-(SP)
  10207.     MOVE.L    SongDataPtr(PC),A0
  10208.     LEA    23(A0),A0
  10209.     LEA    SampleSortList(PC),A1
  10210.     MOVEQ    #1,D0
  10211. losoloop4
  10212.     MOVE.B    (A0)+,(A1)+    ; ST-(0)1
  10213.     MOVE.B    (A0),(A1)+    ; ST-0(1)
  10214.     MOVE.W    D0,(A1)+    ; insnum
  10215.     LEA    29(A0),A0
  10216.     ADDQ.L    #1,D0
  10217.     CMP.L    #32,D0
  10218.     BLO.S    losoloop4
  10219. losoloop5
  10220.     CLR.W    MoreInstrFlag
  10221.     LEA    SampleSortList(PC),A0
  10222.     MOVEQ    #29,D2
  10223. losoloop6
  10224.     MOVE.W    (A0),D0
  10225.     MOVE.W    4(A0),D1
  10226.     CMP.W    D0,D1 ; if next disk greater
  10227.     BHS.S    loso2_2
  10228.     MOVE.W    #1,MoreInstrFlag
  10229.     MOVE.L    (A0),D3 ; swap disks
  10230.     MOVE.L    4(A0),D4
  10231.     MOVE.L    D4,(A0)
  10232.     MOVE.L    D3,4(A0)
  10233. loso2_2    ADDQ.L    #4,A0
  10234.     DBRA    D2,losoloop6
  10235.     TST.W    MoreInstrFlag
  10236.     BNE.S    losoloop5
  10237.     LEA    SampleSortList(PC),A0
  10238.     MOVEQ    #30,D0
  10239. losoloop7
  10240.     CLR.W    (A0)
  10241.     ADDQ.L    #4,A0
  10242.     DBRA    D0,losoloop7
  10243.     MOVEM.L    (SP)+,D0-D4/A0-A1
  10244.     RTS
  10245.  
  10246. MahoneyAndKaktus
  10247.     LEA    Loadas31text(PC),A0
  10248.     BSR    AreYouSure
  10249.     BEQ.S    putmk
  10250.     MOVE.L    SongDataPtr(PC),A0    ; M.K. 32 samples format!
  10251.     LEA    466(A0),A1
  10252.     ADD.L    #66006,A0
  10253. makloop    MOVE.L    (A0),484(A0)
  10254.     CLR.L    (A0)
  10255.     SUBQ.L    #4,A0
  10256.     CMP.L    A0,A1
  10257.     BNE.S    makloop
  10258.     MOVE.L    SongDataPtr(PC),A0
  10259.     LEA    sd_mahokakt(A0),A1
  10260.     LEA    sd_numofpatt(A0),A0
  10261. makloop2
  10262.     MOVE.W    4(A0),(A0)+
  10263.     CMP.L    A0,A1
  10264.     BNE.S    makloop2
  10265.     MOVE.L    #'M.K.',(A0)    ; M.K. again!
  10266.     MOVEQ    #0,D0
  10267.     RTS
  10268.  
  10269. putmk    MOVE.L    SongDataPtr(PC),A0
  10270.     MOVE.L    #'M.K.',sd_mahokakt(A0)    ;  put M.K.
  10271.     MOVEQ    #-1,D0
  10272.     RTS
  10273.  
  10274. Loadas31Text    dc.b    "Load as 31 instr?",0
  10275.  
  10276. CheckInstrLengths
  10277.     MOVE.L    SongDataPtr(PC),A0
  10278.     ADD.L    #20,A0
  10279.     MOVEQ    #30,D1
  10280. xilloop    MOVE.W    26(A0),D0
  10281.     ADD.W    28(A0),D0
  10282.     CMP.W    22(A0),D0
  10283.     BLS.S    xilSkip
  10284.     MOVE.W    26(A0),D0
  10285.     LSR.W    #1,D0    
  10286.     MOVE.W    D0,26(A0)
  10287. xilskip    ADD.L    #30,A0
  10288.     DBRA    D1,xilloop
  10289.     RTS    
  10290.  
  10291. CheckAbort
  10292.     BTST    #2,$DFF016
  10293.     BNE    Return2
  10294.     MOVEM.L    D0-D7/A0-A6,-(SP)
  10295.     LEA    AbortLoadText,A0
  10296.     BSR    AreYouSure
  10297.     BNE.S    chabno
  10298.     MOVEM.L    (SP)+,D0-D7/A0-A6
  10299.     MOVEQ    #0,D7
  10300.     RTS
  10301.  
  10302. chabno    MOVEM.L    (SP)+,D0-D7/A0-A6
  10303.     MOVEQ    #-1,D7
  10304.     RTS
  10305.  
  10306. StopIt    BSR.S    DoStopIt
  10307. TurnOffVoices
  10308.     MOVEM.L    A0-A1,-(SP)
  10309.     MOVE.W    #$000F,$DFF096
  10310.     CLR.W    $DFF0A8
  10311.     CLR.W    $DFF0B8
  10312.     CLR.W    $DFF0C8
  10313.     CLR.W    $DFF0D8
  10314.     CLR.B    RawKeyCode
  10315.     LEA    ScopeInfo,A0
  10316.     LEA    BlankSample,A1
  10317.     MOVE.L    A1,(A0)
  10318.     MOVE.L    A1,20(A0)
  10319.     MOVE.L    A1,40(A0)
  10320.     MOVE.L    A1,60(A0)
  10321.     MOVEM.L    (SP)+,A0-A1
  10322.     RTS
  10323.  
  10324. DoStopIt
  10325.     BSR    SetNormalPtrCol
  10326.     CLR.L    EditMode
  10327.     CLR.L    RunMode
  10328.     CLR.B    PattDelayTime
  10329.     CLR.B    PattDelayTime2
  10330.     BRA    RestoreEffects2
  10331.  
  10332. UsePreset
  10333.     BSR    StorePtrCol
  10334.     TST.L    PLSTmem
  10335.     BEQ.S    upend
  10336.     TST.W    InsNum
  10337.     BEQ.S    upend
  10338.     CLR.B    RawKeyCode
  10339.     MOVE.W    CurrentPreset(PC),D0
  10340.     SUBQ.W    #1,D0
  10341.     MULU    #30,D0
  10342.     MOVE.L    PLSTmem(PC),A0
  10343.     ADD.L    D0,A0
  10344.     MOVE.W    InsNum(PC),D0
  10345.     MULU    #30,D0
  10346.     MOVE.L    SongDataPtr(PC),A1
  10347.     LEA    -10(A1,D0.W),A1
  10348.     MOVE.L    A1,A2
  10349.     MOVEQ    #29,D0
  10350. uploop    MOVE.B    (A0)+,(A1)+
  10351.     DBRA    D0,uploop
  10352.     MOVE.L    (A2),D0
  10353.     AND.L    #$DFDFFFFF,D0
  10354.     CMP.L    #$53540000,D0 ;ST__
  10355.     BNE.S    upok
  10356.     CLR.W    (A2)
  10357.     CLR.L    22(A2)
  10358.     MOVE.L    #$00000001,26(A2)
  10359. upok    BSR    LoadPreset
  10360. upend    BSR    ShowSampleInfo
  10361.     BRA    RestorePtrCol
  10362.  
  10363. ;---- Edit ----
  10364.  
  10365. Edit    TST.W    SamScrEnable
  10366.     BNE    Return2    
  10367.     BSR    StopIt
  10368.     CLR.B    RawKeyCode
  10369.     BSR    SetEditPtrCol
  10370.     BSR    SetScrPatternPos
  10371.     MOVE.L    #'edit',EditMode
  10372.     BRA    WaitForButtonUp
  10373.  
  10374. ;---- Edit Op. ----
  10375.  
  10376. DoEditOp
  10377.     CLR.B    RawKeyCode
  10378.     CMP.W    #1,CurrScreen
  10379.     BNE    Return2
  10380.     TST.B    EdEnable
  10381.     BEQ.S    EditOp
  10382.     ADDQ.B    #1,EdScreen
  10383.     CMP.B    #4,EdScreen
  10384.     BLO.S    EditOp
  10385.     MOVE.B    #1,EdScreen
  10386. EditOp    BSR    WaitForButtonUp
  10387.     ST    EdEnable
  10388.     ST    DisableAnalyzer
  10389.     JSR    ClearAnalyzerColors
  10390.     BSR    ClearRightArea
  10391.     BRA    DrawEditMenu
  10392.  
  10393. EdEnable    dc.b    0
  10394. EdScreen    dc.b    1
  10395.  
  10396. DrawEditMenu
  10397.     CMP.B    #1,EdScreen
  10398.     BNE.S    demskip
  10399.     MOVE.L    #EditOpText1,ShowTextPtr
  10400.     LEA    Edit1Data,A0
  10401.     MOVE.L    #Edit1Size,D0
  10402.     BRA.S    demit
  10403. demskip
  10404.     CMP.B    #2,EdScreen
  10405.     BNE.S    demskip2
  10406.     MOVE.L    #EditOpText2,ShowTextPtr
  10407.     LEA    Edit2Data,A0
  10408.     MOVE.L    #Edit2Size,D0
  10409.     BRA.S    demit
  10410. demskip2
  10411.     CMP.B    #3,EdScreen
  10412.     BNE    Return2
  10413.     MOVE.L    #EditOpText3,ShowTextPtr
  10414.     LEA    Edit3Data,A0
  10415.     MOVE.L    #Edit3Size,D0
  10416. demit    BSR    Decompact
  10417.     BEQ    ExitEditOp
  10418.     LEA    SpectrumAnaPos,A0
  10419.     MOVEQ    #54,D0
  10420. demloop1
  10421.     MOVEQ    #24,D1
  10422. demloop2
  10423.     MOVE.B    1430(A1),10240(A0)
  10424.     MOVE.B    (A1)+,(A0)+
  10425.     DBRA    D1,demloop2
  10426.     LEA    15(A0),A0
  10427.     ADDQ.L    #1,A1
  10428.     DBRA    D0,demloop1
  10429.     BSR    FreeDecompMem
  10430.     MOVE.W    #1936,TextOffset
  10431.     MOVE.W    #22,TextLength
  10432.     BSR    ShowText
  10433.     CMP.B    #1,EdScreen
  10434.     BEQ    ShowSampleAll
  10435.     CMP.B    #2,EdScreen
  10436.     BNE.S    demskip3
  10437.     BSR    ShowTrackPatt
  10438.     BSR    ShowFrom
  10439.     BSR    ShowTo
  10440.     BSR    ShowRecordMode
  10441.     BSR    ShowQuantize
  10442.     BSR    ShowMetronome
  10443.     BRA    ShowMultiMode
  10444. demskip3
  10445.     CMP.B    #3,EdScreen
  10446.     BNE    Return2
  10447.     BSR    ShowHalfClip
  10448.     BSR    ShowPos
  10449.     BSR    ShowMod
  10450.     BRA    ShowVol
  10451.  
  10452. EditOpText1    dc.b    '  track      pattern  '
  10453. EditOpText2    dc.b    '  record     samples  '
  10454. EditOpText3    dc.b    '    sample editor     '
  10455.  
  10456. CheckEditOpGadgs
  10457.     MOVE.W    PattCurPos(PC),D0
  10458.     BSR.S    GetPositionPtr
  10459.     MOVEM.W    MouseX2,D0/D1
  10460.     CMP.W    #306,D0
  10461.     BHS.S    CheckEdSwap
  10462.     CMP.B    #1,EdScreen
  10463.     BEQ    CheckEdGadg1
  10464.     CMP.B    #2,EdScreen
  10465.     BEQ    CheckEdGadg2
  10466.     CMP.B    #3,EdScreen
  10467.     BEQ    CheckEdGadg3
  10468.     RTS
  10469.  
  10470. GetPositionPtr
  10471.     MOVE.L    SongDataPtr(PC),A0
  10472.     LEA    sd_patterndata(A0),A0
  10473.     MOVE.L    PatternNumber(PC),D2
  10474.     LSL.L    #8,D2
  10475.     LSL.L    #2,D2
  10476.     ADD.L    D2,A0
  10477.     MOVEQ    #0,D2
  10478.     MOVE.W    D0,D2
  10479.     DIVU    #6,D2
  10480.     LSL.W    #2,D2
  10481.     ADD.W    D2,A0
  10482.     RTS
  10483.  
  10484. CheckEdSwap
  10485.     CMP.W    #55,D1
  10486.     BLS    Return2
  10487.     MOVEQ    #1,D2
  10488.     CMP.W    #66,D1
  10489.     BLS.S    SetEditOpScreen
  10490.     MOVEQ    #2,D2
  10491.     CMP.W    #77,D1
  10492.     BLS.S    SetEditOpScreen
  10493.     MOVEQ    #3,D2
  10494.     CMP.W    #88,D1
  10495.     BLS.S    SetEditOpScreen
  10496.     CMP.W    #99,D1
  10497.     BLS.S    ExitEditOp
  10498.     RTS
  10499.  
  10500. SetEditOpScreen
  10501.     MOVE.B    D2,EdScreen
  10502.     BRA    EditOp
  10503.  
  10504. ExitEditOp
  10505.     SF    EdEnable
  10506.     CLR.B    RawKeyCode
  10507.     BRA    DisplayMainScreen
  10508.  
  10509. CheckEdGadg1
  10510.     CMP.W    #55,D1
  10511.     BLS    ToggleSampleAll
  10512.     CMP.W    #66,D1
  10513.     BLS    NoteUp
  10514.     CMP.W    #77,D1
  10515.     BLS    NoteDown
  10516.     CMP.W    #88,D1
  10517.     BLS    OctaveUp
  10518.     CMP.W    #99,D1
  10519.     BLS    OctaveDown
  10520.     RTS
  10521.  
  10522. CheckEdGadg2
  10523.     CMP.W    #55,D1
  10524.     BLS    ToggleTrackPatt
  10525.     CMP.W    #213,D0
  10526.     BLS.S    ceg2left
  10527.     CMP.W    #66,D1
  10528.     BLS    DeleteOrKill
  10529.     CMP.W    #77,D1
  10530.     BLS    ExchangeOrCopy
  10531.     CMP.W    #88,D1
  10532.     BLS    SetSampleFrom
  10533.     CMP.W    #99,D1
  10534.     BLS    SetSampleTo
  10535.     RTS
  10536.  
  10537. ceg2left
  10538.     CMP.W    #66,D1
  10539.     BLS    ToggleRecordMode
  10540.     CMP.W    #77,D1
  10541.     BLS    SetQuantize
  10542.     CMP.W    #88,D1
  10543.     BLS    SetMetronome
  10544.     CMP.W    #99,D1
  10545.     BLS    ToggleMultiMode
  10546.     RTS
  10547.  
  10548. CheckEdGadg3
  10549.     MOVE.L    SongDataPtr(PC),A5
  10550.     LEA    -10(A5),A5
  10551.     MOVE.W    InsNum(PC),D2
  10552.     BNE.S    ceg3skip
  10553.     MOVE.W    LastInsNum,D2
  10554. ceg3skip
  10555.     MULU    #30,D2
  10556.     ADD.L    D2,A5
  10557.     CMP.W    #55,D1
  10558.     BLS    ToggleHalfClip
  10559.     CMP.W    #213,D0
  10560.     BLS.S    ceg3mid
  10561.     CMP.W    #66,D1
  10562.     BLS    SetSamplePos
  10563.     CMP.W    #77,D1
  10564.     BLS    SetModSpeed
  10565.     CMP.W    #88,D1
  10566.     BLS    CutBeg
  10567.     CMP.W    #99,D1
  10568.     BLS    ChangeVolume
  10569.     RTS
  10570.  
  10571. ceg3mid    CMP.W    #165,D0
  10572.     BLS.S    ceg3left
  10573.     CMP.W    #66,D1
  10574.     BLS    Echo
  10575.     CMP.W    #77,D1
  10576.     BLS    Filter
  10577.     CMP.W    #88,D1
  10578.     BLS    Backwards
  10579.     CMP.W    #99,D1
  10580.     BLS    DownSample
  10581.     RTS
  10582.  
  10583. ceg3left
  10584.     CMP.W    #66,D1
  10585.     BLS    Mix
  10586.     CMP.W    #77,D1
  10587.     BLS    Boost
  10588.     CMP.W    #88,D1
  10589.     BLS    XFade
  10590.     CMP.W    #99,D1
  10591.     BLS    UpSample
  10592.     RTS
  10593.  
  10594. ToggleSampleAll
  10595.     BSR    WaitForButtonUp
  10596.     EOR.B    #1,SampleAllFlag
  10597. ShowSampleAll
  10598.     LEA    BitplaneData+1838,A1
  10599.     LEA    S_BoxData,A2
  10600.     TST.B    SampleAllFlag
  10601.     BEQ    rtdoit
  10602.     LEA    A_BoxData,A2
  10603.     BRA    rtdoit
  10604.  
  10605. OctaveUp
  10606.     MOVE.W    #24,NoteShift
  10607.     BRA.S    nup2
  10608.  
  10609. NoteUp    MOVE.W    #2,NoteShift
  10610. nup2    BSR    SaveUndo
  10611.     CMP.W    #214,D0
  10612.     BLS.S    nup3
  10613.     MOVEQ    #0,D0
  10614.     BSR    GetPositionPtr
  10615.     BSR.S    SampleNoteUp
  10616.     MOVEQ    #6,D0
  10617.     BSR    GetPositionPtr
  10618.     BSR.S    SampleNoteUp
  10619.     MOVEQ    #12,D0
  10620.     BSR    GetPositionPtr
  10621.     BSR.S    SampleNoteUp
  10622.     MOVEQ    #18,D0
  10623.     BSR    GetPositionPtr
  10624. nup3    BSR.S    SampleNoteUp
  10625.     BRA    RedrawPattern
  10626.  
  10627. SampleNoteUp
  10628.     MOVEQ    #63,D6
  10629.     MOVE.L    A0,A3
  10630.     MOVE.W    InsNum(PC),D3
  10631.     TST.B    SampleAllFlag
  10632.     BEQ.S    sanulo2
  10633.     MOVEQ    #0,D3
  10634. sanulo2    MOVE.L    D6,D0
  10635.     MOVE.L    A3,A0
  10636. sanuloop
  10637.     MOVE.B    2(A0),D1
  10638.     LSR.B    #4,D1
  10639.     MOVE.B    (A0),D2
  10640.     AND.B    #$F0,D2
  10641.     OR.B    D2,D1
  10642.     CMP.B    D3,D1
  10643.     BNE.S    sanuskip
  10644.     MOVE.W    (A0),D1
  10645.     MOVE.W    D1,D2
  10646.     AND.W    #$F000,D2
  10647.     AND.W    #$0FFF,D1
  10648.     BEQ.S    sanuskip
  10649.     BSR    CheckPeriod
  10650.     BNE.S    sanuskip
  10651.     ADD.W    NoteShift(PC),D5
  10652.     CMP.W    #$0048,D5
  10653.     BLO.S    sanuok
  10654.     TST.B    TransDelFlag
  10655.     BEQ.S    sanuskip
  10656.     AND.L    #$00000FFF,(A0)
  10657.     BRA.S    sanuskip
  10658. sanuok    MOVE.W    0(A2,D5.W),D1
  10659.     OR.W    D2,D1
  10660.     MOVE.W    D1,(A0)
  10661. sanuskip
  10662.     LEA    16(A0),A0
  10663.     DBRA    D0,sanuloop
  10664.     TST.B    SampleAllFlag
  10665.     BEQ    Return2
  10666.     ADDQ.W    #1,D3
  10667.     CMP.W    #32,D3
  10668.     BLO.S    sanulo2
  10669.     RTS
  10670.  
  10671. OctaveDown
  10672.     MOVE.W    #24,NoteShift
  10673.     BRA.S    ndown2
  10674.  
  10675. NoteDown
  10676.     MOVE.W    #2,NoteShift
  10677. ndown2    BSR    SaveUndo
  10678.     CMP.W    #214,D0
  10679.     BLS.S    ndown3
  10680.     MOVEQ    #0,D0
  10681.     BSR    GetPositionPtr
  10682.     BSR.S    SampleNoteDown
  10683.     MOVEQ    #6,D0
  10684.     BSR    GetPositionPtr
  10685.     BSR.S    SampleNoteDown
  10686.     MOVEQ    #12,D0
  10687.     BSR    GetPositionPtr
  10688.     BSR.S    SampleNoteDown
  10689.     MOVEQ    #18,D0
  10690.     BSR    GetPositionPtr
  10691. ndown3    BSR.S    SampleNoteDown
  10692.     BRA    RedrawPattern
  10693.  
  10694. SampleNoteDown
  10695.     MOVEQ    #63,D6
  10696.     MOVE.L    A0,A3
  10697.     MOVE.W    InsNum(PC),D3
  10698.     TST.B    SampleAllFlag
  10699.     BEQ.S    sandlo2
  10700.     MOVEQ    #0,D3
  10701. sandlo2    MOVE.W    D6,D0
  10702.     MOVE.L    A3,A0
  10703. sandloop
  10704.     MOVE.B    2(A0),D1
  10705.     LSR.B    #4,D1
  10706.     MOVE.B    (A0),D2
  10707.     AND.B    #$F0,D2
  10708.     OR.B    D2,D1
  10709.     CMP.B    D1,D3
  10710.     BNE.S    sandskip
  10711.     MOVE.W    (A0),D1
  10712.     MOVE.W    D1,D2
  10713.     AND.W    #$F000,D2
  10714.     AND.W    #$0FFF,D1
  10715.     BEQ.S    sandskip
  10716.     BSR.S    CheckPeriod
  10717.     BNE.S    sandskip
  10718.     SUB.W    NoteShift(PC),D5
  10719.     BPL.S    sandok
  10720.     TST.B    TransDelFlag
  10721.     BEQ.S    sandskip
  10722.     AND.L    #$00000FFF,(A0)
  10723.     BRA.S    sandskip
  10724. sandok    MOVE.W    0(A2,D5.W),D1
  10725.     OR.W    D2,D1
  10726.     MOVE.W    D1,(A0)
  10727. sandskip
  10728.     LEA    16(A0),A0
  10729.     DBRA    D0,sandloop
  10730.     TST.B    SampleAllFlag
  10731.     BEQ    Return2
  10732.     ADDQ.W    #1,D3
  10733.     CMP.W    #$20,D3
  10734.     BLO.S    sandlo2
  10735.     RTS
  10736.  
  10737. NoteShift
  10738.     dc.w    0
  10739.  
  10740. CheckPeriod
  10741.     LEA    PeriodTable(PC),A2
  10742.     MOVEQ    #-2,D5
  10743. chpeloop
  10744.     ADDQ.L    #2,D5
  10745.     MOVE.W    0(A2,D5.W),D4
  10746.     BEQ.S    PeriodNotOk
  10747.     CMP.W    D4,D1
  10748.     BEQ.S    PeriodOk
  10749.     BRA.S    chpeloop
  10750.  
  10751. PeriodOk
  10752.     MOVEQ    #0,D4
  10753.     RTS
  10754.  
  10755. PeriodNotOk
  10756.     MOVEQ    #-1,D4
  10757.     RTS
  10758.  
  10759. ToggleTrackPatt
  10760.     BSR    WaitForButtonUp
  10761.     ADDQ.B    #1,TrackPattFlag
  10762.     CMP.B    #3,TrackPattFlag
  10763.     BLO.S    ShowTrackPatt
  10764.     CLR.B    TrackPattFlag
  10765. ShowTrackPatt
  10766.     LEA    BitplaneData+1838,A1
  10767.     LEA    T_BoxData,A2
  10768.     TST.B    TrackPattFlag
  10769.     BEQ    rtdoit
  10770.     LEA    P_BoxData,A2
  10771.     CMP.B    #1,TrackPattFlag
  10772.     BEQ    rtdoit
  10773.     LEA    S_BoxData,A2
  10774.     BRA    rtdoit
  10775.  
  10776. KillInstrTrack
  10777.     BSR    SaveUndo
  10778.     MOVE.W    PattCurPos(PC),D0
  10779.     BSR    GetPositionPtr
  10780.     BRA.S    dst2
  10781.  
  10782. DeleteOrKill
  10783.     CMP.W    #260,D0
  10784.     BHS    KillSample
  10785. DelSampleTrack
  10786.     BSR    SaveUndo
  10787.     TST.B    TrackPattFlag
  10788.     BEQ.S    dst2
  10789.     MOVEQ    #0,D0
  10790.     BSR    GetPositionPtr
  10791.     BSR.S    dstdoit
  10792.     MOVEQ    #6,D0
  10793.     BSR    GetPositionPtr
  10794.     BSR.S    dstdoit
  10795.     MOVEQ    #12,D0
  10796.     BSR    GetPositionPtr
  10797.     BSR.S    dstdoit
  10798.     MOVEQ    #18,D0
  10799.     BSR    GetPositionPtr
  10800. dst2    BSR.S    dstdoit
  10801.     BRA    RedrawPattern
  10802.  
  10803. dstdoit    CLR.B    RawKeyCode
  10804.     MOVEQ    #63,D0
  10805.     MOVE.W    InsNum(PC),D3
  10806.     BEQ    NotSampleNull
  10807. ksloop    MOVE.B    2(A0),D1
  10808.     LSR.B    #4,D1
  10809.     MOVE.B    (A0),D2
  10810.     AND.B    #$F0,D2
  10811.     OR.B    D2,D1
  10812.     CMP.B    D1,D3
  10813.     BNE.S    ksskip
  10814.     CLR.L    (A0)
  10815. ksskip    LEA    16(A0),A0
  10816.     DBRA    D0,ksloop
  10817.     RTS
  10818.  
  10819. KillSample
  10820.     LEA    KillSampleText,A0
  10821.     BSR    AreYouSure
  10822.     BNE    Return2
  10823. Destroy    BSR    StorePtrCol
  10824.     MOVE.W    InsNum(PC),D0
  10825.     BEQ    ErrorRestoreCol
  10826.     BSR    TurnOffVoices
  10827.     BSR    FreeSample
  10828.     MOVE.L    SongDataPtr(PC),A0
  10829.     MOVE.W    InsNum(PC),D0
  10830.     MULU    #30,D0
  10831.     LEA    -10(A0),A0
  10832.     ADD.L    D0,A0
  10833.     MOVE.L    A0,A1
  10834.     MOVEQ    #29,D0
  10835. kisalop    CLR.B    (A0)+
  10836.     DBRA    D0,kisalop
  10837.     MOVE.W    #1,28(A1)
  10838.     BSR    ShowSampleInfo
  10839.     BSR    RedrawSample
  10840.     BRA    RestorePtrCol
  10841.  
  10842. ExchangeOrCopy
  10843.     MOVEQ    #-1,D4
  10844.     CMP.W    #260,D0
  10845.     BHS.S    CopySampleTrack
  10846. ExchSampleTrack
  10847.     CMP.B    #2,TrackPattFlag
  10848.     BEQ    ExchSamples
  10849.     MOVEQ    #0,D4
  10850.     BRA.S    mstskip
  10851. CopySampleTrack
  10852.     CMP.B    #2,TrackPattFlag
  10853.     BEQ    CopySamples
  10854. mstskip    TST.B    TrackPattFlag
  10855.     BEQ.S    mst2
  10856.     MOVEQ    #0,D0
  10857.     BSR    GetPositionPtr
  10858.     BSR.S    mstdoit
  10859.     MOVEQ    #6,D0
  10860.     BSR    GetPositionPtr
  10861.     BSR.S    mstdoit
  10862.     MOVEQ    #12,D0
  10863.     BSR    GetPositionPtr
  10864.     BSR.S    mstdoit
  10865.     MOVEQ    #18,D0
  10866.     BSR    GetPositionPtr
  10867. mst2    BSR.S    mstdoit
  10868.     BRA    RedrawPattern
  10869.  
  10870. mstdoit    MOVEQ    #63,D0
  10871. esloop    MOVE.B    2(A0),D1
  10872.     LSR.B    #4,D1
  10873.     MOVE.B    (A0),D2
  10874.     AND.B    #$F0,D2
  10875.     OR.B    D2,D1
  10876.     CMP.B    SampleFrom(PC),D1
  10877.     BNE.S    esskip2
  10878.     AND.L    #$0FFF0FFF,(A0)
  10879.     MOVE.B    SampleTo(PC),D2
  10880.     MOVE.B    D2,D3
  10881.     AND.B    #$F0,D2
  10882.     OR.B    D2,(A0)
  10883.     LSL.B    #4,D3
  10884.     OR.B    D3,2(A0)
  10885.     BRA.S    esskip3
  10886. esskip2    TST.B    D4
  10887.     BNE.S    esskip3
  10888.     CMP.B    SampleTo(PC),D1
  10889.     BNE.S    esskip3
  10890.     AND.L    #$0FFF0FFF,(A0)
  10891.     MOVE.B    SampleFrom(PC),D2
  10892.     MOVE.B    D2,D3
  10893.     AND.B    #$F0,D2
  10894.     OR.B    D2,(A0)
  10895.     LSL.B    #4,D3
  10896.     OR.B    D3,2(A0)
  10897. esskip3    LEA    16(A0),A0
  10898.     DBRA    D0,esloop
  10899.     RTS
  10900.  
  10901. ExchSamples
  10902.     BSR    StorePtrCol
  10903.     MOVEQ    #0,D0
  10904.     MOVE.B    SampleFrom(PC),D0
  10905.     BEQ    ErrorRestoreCol
  10906.     MOVEQ    #0,D1
  10907.     MOVE.B    SampleTo(PC),D1
  10908.     BEQ    ErrorRestoreCol
  10909.     MOVE.W    D0,D2
  10910.     MOVE.W    D1,D3
  10911.     LEA    SampleLengthAdd+2,A2
  10912.     LSL.W    #1,D2
  10913.     LSL.W    #1,D3
  10914.     LEA    (A2,D2.W),A0
  10915.     LEA    (A2,D3.W),A1
  10916.     MOVE.W    (A0),D4
  10917.     MOVE.W    (A1),(A0)
  10918.     MOVE.W    D4,(A1)
  10919.     LEA    SamplePtrs,A2
  10920.     LSL.W    #1,D2
  10921.     LSL.W    #1,D3
  10922.     LEA    (A2,D2.W),A0
  10923.     LEA    (A2,D3.W),A1
  10924.     MOVE.L    (A0),D4
  10925.     MOVE.L    (A1),(A0)
  10926.     MOVE.L    D4,(A1)
  10927.     MOVE.L    124(A0),D4
  10928.     MOVE.L    124(A1),124(A0)
  10929.     MOVE.L    D4,124(A1)
  10930.     SUBQ.W    #1,D0
  10931.     SUBQ.W    #1,D1
  10932.     MULU    #30,D0
  10933.     MULU    #30,D1
  10934.     MOVE.L    SongDataPtr(PC),A2
  10935.     LEA    20(A2),A2
  10936.     LEA    (A2,D0.W),A0
  10937.     LEA    (A2,D1.W),A1
  10938.     MOVEQ    #29,D0
  10939. exsalop    MOVE.B    (A0),D1
  10940.     MOVE.B    (A1),(A0)+
  10941.     MOVE.B    D1,(A1)+
  10942.     DBRA    D0,exsalop
  10943.     BSR    ShowSampleInfo
  10944.     BSR    RedrawSample
  10945.     BRA    RestorePtrCol
  10946.  
  10947. CopySamples
  10948.     BSR    StorePtrCol
  10949.     MOVEQ    #0,D0
  10950.     MOVE.B    SampleFrom(PC),D0
  10951.     BEQ    ErrorRestoreCol
  10952.     MOVEQ    #0,D1
  10953.     MOVE.B    SampleTo(PC),D1
  10954.     BEQ    ErrorRestoreCol
  10955.     LEA    SamplePtrs(PC),A2
  10956.     LSL.W    #2,D0
  10957.     LSL.W    #2,D1
  10958.     LEA    (A2,D0.W),A3
  10959.     LEA    (A2,D1.W),A4
  10960.     MOVE.L    (A3),D0
  10961.     BEQ    ErrorRestoreCol
  10962.     MOVE.L    124(A3),D0
  10963.     MOVEQ    #MEMF_CHIP,D1
  10964.     MOVE.L    4.W,A6
  10965.     JSR    LVOAllocMem(A6)
  10966.     TST.L    D0
  10967.     BEQ    OutOfMemErr
  10968.     MOVE.L    D0,A5
  10969.     MOVEQ    #0,D0
  10970.     MOVE.B    SampleTo(PC),D0
  10971.     MOVE.W    D0,InsNum
  10972.     BSR    Destroy
  10973.     MOVE.L    A5,(A4)
  10974.     MOVE.L    124(A3),D0
  10975.     MOVE.L    D0,124(A4)
  10976.     MOVE.L    (A3),A0
  10977. cosalp2    MOVE.B    (A0)+,(A5)+
  10978.     SUBQ.L    #1,D0
  10979.     BNE.S    cosalp2
  10980.     MOVEQ    #0,D0
  10981.     MOVEQ    #0,D1
  10982.     MOVE.B    SampleFrom(PC),D0
  10983.     MOVE.B    SampleTo(PC),D1
  10984.     MOVE.W    D1,InsNum
  10985.     MULU    #30,D0
  10986.     MULU    #30,D1
  10987.     MOVE.L    SongDataPtr(PC),A2
  10988.     LEA    -10(A2),A2
  10989.     LEA    (A2,D0.W),A0
  10990.     LEA    (A2,D1.W),A1
  10991.     MOVEQ    #29,D0
  10992. cosalop    MOVE.B    (A0)+,(A1)+
  10993.     DBRA    D0,cosalop
  10994.     BSR    ShowSampleInfo
  10995.     BSR    RedrawSample
  10996.     BRA    RestorePtrCol
  10997.  
  10998. SetSampleFrom
  10999.     MOVE.W    InsNum(PC),D2
  11000.     CMP.W    #283,D0
  11001.     BLS.S    sesfskip
  11002.     MOVE.B    SampleFrom(PC),D2
  11003.     CMP.W    #295,D0
  11004.     BLS.S    sesfup
  11005.     SUBQ.B    #1,D2
  11006.     BPL.S    sesfskip
  11007.     MOVEQ    #0,D2
  11008. sesfskip
  11009.     MOVE.B    D2,SampleFrom
  11010.     BSR    Wait_4000
  11011.     BRA.S    ShowFrom
  11012. sesfup    ADDQ.B    #1,D2
  11013.     CMP.B    #$1F,D2
  11014.     BLS.S    sesfskip
  11015.     MOVE.B    #$1F,SampleFrom
  11016. ShowFrom
  11017.     MOVE.W    #3273,TextOffset
  11018.     CLR.W    WordNumber
  11019.     MOVE.B    SampleFrom(PC),WordNumber+1
  11020.     BRA    PrintHexByte
  11021.  
  11022. SetSampleTo
  11023.     MOVE.W    InsNum(PC),D2
  11024.     CMP.W    #283,D0
  11025.     BLS.S    sestskip
  11026.     MOVE.B    SampleTo(PC),D2
  11027.     CMP.W    #295,D0
  11028.     BLS.S    sestup
  11029.     SUBQ.B    #1,D2
  11030.     BPL.S    sestskip
  11031.     MOVEQ    #0,D2
  11032. sestskip
  11033.     MOVE.B    D2,SampleTo
  11034.     BSR    Wait_4000
  11035.     BRA.S    ShowTo
  11036. sestup    ADDQ.B    #1,D2
  11037.     CMP.B    #$1F,D2
  11038.     BLS.S    sestskip
  11039.     MOVE.B    #$1F,SampleTo
  11040. ShowTo    MOVE.W    #3713,TextOffset
  11041.     CLR.W    WordNumber
  11042.     MOVE.B    SampleTo(PC),WordNumber+1
  11043.     BRA    PrintHexByte
  11044.  
  11045. SampleFrom    dc.b 0
  11046. SampleTo    dc.b 0
  11047.  
  11048. ToggleRecordMode
  11049.     BSR    WaitForButtonUp
  11050.     EOR.B    #1,RecordMode
  11051. ShowRecordMode
  11052.     MOVE.W    #2382,D1
  11053.     LEA    PattText,A0
  11054.     TST.B    RecordMode
  11055.     BEQ.S    srmskip
  11056.     LEA    SongText,A0
  11057. srmskip    MOVEQ    #4,D0
  11058.     BRA    ShowText3
  11059.  
  11060. PattText    dc.b 'patt'
  11061. SongText    dc.b 'song'
  11062. RecordMode    dc.b 0
  11063. QuantizeValue    dc.b 1
  11064. MetroSpeed    dc.b 4
  11065. MetroChannel    dc.b 0
  11066. MultiFlag    dc.b 0
  11067. SampleAllFlag    dc.b 0
  11068. TrackPattFlag    dc.b 0
  11069. ClipHalveFlag    dc.b 0
  11070. AbortDecFlag    dc.w 0
  11071.  
  11072. GetDecByte
  11073.     MOVE.W    #1,AbortDecFlag
  11074.     BSR    StorePtrCol
  11075.     BSR    SetWaitPtrCol
  11076.     BSR    UpdateLineCurPos
  11077.     BSR    GetKey0_9
  11078.     CMP.B    #68,D1
  11079.     BEQ.S    gdbexit
  11080.     MOVE.B    D1,D0
  11081.     MULU    #10,D0
  11082.     MOVE.B    D0,GetDecTemp
  11083.     BSR    ShowOneDigit
  11084.     ADDQ.W    #8,LineCurX
  11085.     BSR    UpdateLineCurPos
  11086.     BSR    GetKey0_9
  11087.     CMP.B    #68,D1
  11088.     BEQ.S    gdbexit
  11089.     ADD.B    D1,GetDecTemp
  11090.     CLR.W    AbortDecFlag
  11091. gdbexit    CLR.W    LineCurX
  11092.     MOVE.W    #270,LineCurY
  11093.     BSR    UpdateLineCurPos
  11094.     BSR    RestorePtrCol
  11095.     MOVE.B    GetDecTemp,D0
  11096.     RTS
  11097.  
  11098. SetQuantize
  11099.     CLR.B    RawKeyCode
  11100.     MOVE.W    #196,LineCurX
  11101.     MOVE.W    #76,LineCurY
  11102.     MOVE.W    #2824,TextOffset
  11103.     BSR    GetDecByte
  11104.     TST.W    AbortDecFlag
  11105.     BNE    ShowQuantize
  11106.     CMP.B    #63,D0
  11107.     BLS.S    tqskip
  11108.     MOVEQ.B    #63,D0
  11109. tqskip    MOVE.B    D0,QuantizeValue
  11110. ShowQuantize
  11111.     MOVE.W    #2824,TextOffset
  11112.     CLR.W    WordNumber
  11113.     MOVE.B    QuantizeValue,WordNumber+1
  11114.     BRA    Print2DecDigits
  11115.  
  11116. SetMetronome
  11117.     CLR.B    RawKeyCode
  11118.     CMP.W    #188,D0
  11119.     BHS.S    smchan
  11120.     MOVE.W    #3261,TextOffset
  11121.     MOVE.W    #172,LineCurX
  11122.     MOVE.W    #87,LineCurY
  11123.     BSR    GetDecByte
  11124.     TST.W    AbortDecFlag
  11125.     BNE    ShowMetronome
  11126.     CMP.B    #64,D0
  11127.     BLS.S    smexit
  11128.     MOVEQ.B    #64,D0
  11129. smexit    MOVE.B    D0,MetroSpeed
  11130.     BRA.S    ShowMetronome
  11131.  
  11132. smchan    MOVE.W    #3264,TextOffset
  11133.     BSR    GetHexByte
  11134.     CMP.W    #4,D0
  11135.     BLS.S    smexit2
  11136.     MOVEQ    #4,D0
  11137. smexit2    MOVE.B    D0,MetroChannel
  11138. ShowMetronome
  11139.     MOVE.W    #3261,TextOffset
  11140.     CLR.W    WordNumber
  11141.     MOVE.B    MetroSpeed,WordNumber+1
  11142.     BSR    Print2DecDigits
  11143.     MOVE.W    #3264,TextOffset
  11144.     CLR.W    WordNumber
  11145.     MOVE.B    MetroChannel,WordNumber+1
  11146.     BRA    Print2DecDigits
  11147.  
  11148. ToggleMultiMode
  11149.     BSR    WaitForButtonUp
  11150.     CLR.B    RawKeyCode
  11151.     EOR.B    #1,MultiFlag
  11152. ShowMultiMode
  11153.     BSR.S    Show_MS
  11154.     CMP.W    #1,CurrScreen
  11155.     BNE    Return2
  11156.     CMP.B    #2,EdScreen
  11157.     BNE    Return2
  11158.     TST.B    EdEnable
  11159.     BEQ    Return2
  11160.     MOVE.W    #3700,D1
  11161.     LEA    SingleText(PC),A0
  11162.     TST.B    MultiFlag
  11163.     BEQ.S    smmskip
  11164.     LEA    MultiText(PC),A0
  11165. smmskip    MOVEQ    #6,D0
  11166.     BRA    ShowText3
  11167.  
  11168. SingleText    dc.b 'single'
  11169. MultiText    dc.b ' multi'
  11170.  
  11171. Show_MS    CMP.W    #4,CurrScreen
  11172.     BEQ    Return2
  11173.     MOVE.B    #' ',D0
  11174.     TST.B    MultiFlag
  11175.     BEQ.S    smsskp1
  11176.     MOVE.B    #'M',D0
  11177. smsskp1    MOVE.B    #' ',D1
  11178.     TST.B    SplitFlag
  11179.     BEQ.S    smsskp2
  11180.     MOVE.B    #'S',D1
  11181. smsskp2    MOVE.B    D0,mstext
  11182.     MOVE.B    D1,mstext+1
  11183.     MOVE.W    #4121,D1
  11184.     MOVEQ    #2,D0
  11185.     LEA    mstext(PC),A0
  11186.     BSR    ShowText3
  11187.     BRA    ShowAutoInsert
  11188.  
  11189. mstext    dc.b '__'
  11190.  
  11191. ;---- Edit Op. 3 ----
  11192.  
  11193. ToggleHalfClip
  11194.     BSR    WaitForButtonUp
  11195.     EOR.B    #1,HalfClipFlag
  11196. ShowHalfClip
  11197.     LEA    BitplaneData+1838,A1
  11198.     LEA    H_BoxData,A2
  11199.     TST.B    HalfClipFlag
  11200.     BEQ.S    ogaoga
  11201.     LEA    C_BoxData,A2
  11202. ogaoga    JMP    rtdoit
  11203.  
  11204. SetSamplePos
  11205.     MOVE.L    SamplePos(PC),D2
  11206.     CMP.W    #283,D0
  11207.     BLS    Return2
  11208.     CMP.W    #295,D0
  11209.     BLS.S    shpoup
  11210.     SUBQ.L    #1,D2
  11211.     BTST    #2,$DFF016
  11212.     BNE.S    shposkip
  11213.     SUB.L    #15,D2
  11214. shposkip
  11215.     BPL.S    shposkip2
  11216.     MOVEQ    #0,D2
  11217. shposkip2
  11218.     MOVE.L    D2,SamplePos
  11219.     BRA.S    ShowPos
  11220. shpoup    ADDQ.L    #1,D2
  11221.     BTST    #2,$DFF016
  11222.     BNE.S    shposkip3
  11223.     ADD.L    #15,D2
  11224. shposkip3
  11225.     MOVEQ    #0,D3
  11226.     MOVE.W    22(A5),D3
  11227.     LSL.L    #1,D3
  11228.     CMP.L    D3,D2
  11229.     BLS.S    shposkip2
  11230.     MOVE.L    D3,SamplePos
  11231. ShowPos    CMP.W    #1,CurrScreen
  11232.     BNE    Return2
  11233.     TST.B    EdEnable
  11234.     BEQ    Return2
  11235.     CMP.B    #3,EdScreen
  11236.     BNE    Return2
  11237.     MOVE.W    #2391,TextOffset
  11238.     MOVE.W    SamplePos+2(PC),WordNumber
  11239.     BRA    PrintHexWord
  11240.  
  11241. SetModSpeed
  11242.     CMP.W    #243,D0
  11243.     BLS    DoMod
  11244.     MOVEQ    #0,D2
  11245.     BTST    #2,$DFF016
  11246.     BEQ.S    semoskp
  11247.     MOVE.B    ModSpeed,D2
  11248.     CMP.W    #283,D0
  11249.     BLS    Return2
  11250.     CMP.W    #295,D0
  11251.     BLS.S    semoup
  11252.     SUB.B    #1,D2
  11253.     CMP.B    #127,D2
  11254.     BNE.S    semoskp
  11255.     MOVE.B    #128,D2
  11256.     BRA.S    semoskp
  11257. semoup    ADD.B    #1,D2
  11258.     CMP.B    #128,D2
  11259.     BNE.S    semoskp
  11260.     MOVEQ    #127,D2
  11261. semoskp    MOVE.B    D2,ModSpeed
  11262.     BSR    Wait_4000
  11263. ShowMod    LEA    PlusMinusText(PC),A0
  11264.     MOVEQ    #0,D6
  11265.     MOVE.B    ModSpeed,D6
  11266.     BPL.S    shmoskp
  11267.     NEG.B    D6
  11268.     ADDQ.L    #1,A0
  11269. shmoskp    MOVEQ    #1,D0
  11270.     MOVE.W    #2831,D1
  11271.     BSR    ShowText3
  11272.     MOVE.W    D6,WordNumber
  11273.     BRA    Print3DecDigits
  11274.  
  11275. PlusMinusText    dc.b ' -'
  11276.  
  11277. DoMod    BSR    WaitForButtonUp
  11278.     BSR    StorePtrCol
  11279.     BSR    SetWaitPtrCol
  11280.     MOVEQ    #0,D2
  11281.     MOVE.W    SampleInfo(PC),D2
  11282.     BEQ    ErrorRestoreCol
  11283.     LSL.W    #1,D2
  11284.     SUBQ.W    #1,D2
  11285.     MOVE.L    si_pointer,D0
  11286.     BEQ    ErrorRestoreCol
  11287.     BSR    AllocBuffer
  11288.     MOVE.L    D0,A2
  11289.     MOVE.L    D0,A3
  11290.     MOVE.L    A1,A4
  11291.     ADD.L    D2,A3
  11292.     CLR.L    ModOffset
  11293.     CLR.L    ModPos
  11294. dmoloop    CMP.L    A3,A2
  11295.     BHS.S    dmoskip
  11296.     MOVE.B    (A1),(A2)+
  11297.     BSR.S    UpdateMod
  11298.     BRA.S    dmoloop
  11299. dmoskip    MOVE.L    si_pointer(PC),A1
  11300.     CLR.W    (A1)
  11301.     BSR    FreeBuffer
  11302.     BSR    RestorePtrCol
  11303.     BRA    DisplaySample
  11304.  
  11305. UpdateMod
  11306.     MOVE.B    ModSpeed(PC),D0
  11307.     BEQ.S    upmplus
  11308.     EXT.W    D0
  11309.     EXT.L    D0
  11310.     MOVE.L    ModPos(PC),D1
  11311.     ADD.L    D0,D1
  11312.     MOVE.L    D1,ModPos
  11313.     ASR.L    #8,D1
  11314.     ASR.L    #4,D1
  11315.     MOVE.L    D1,D3
  11316.     AND.W    #$1F,D1    
  11317.     LEA    VibratoTable,A0
  11318.     MOVEQ    #0,D0
  11319.     MOVE.B    (A0,D1.W),D0
  11320.     LSR.B    #2,D0
  11321.     MOVE.L    ModOffset(PC),D1
  11322.     BTST    #5,D3
  11323.     BEQ.S    upmskip
  11324.     SUB.L    D0,D1
  11325.     BRA.S    upmskp2
  11326. upmskip    ADD.L    D0,D1
  11327. upmskp2    ADD.L    #$800,D1
  11328.     MOVE.L    D1,ModOffset
  11329.     ASR.L    #8,D1
  11330.     ASR.L    #3,D1
  11331.     BPL.S    upmskp3
  11332.     MOVEQ    #0,D1
  11333. upmskp3    CMP.L    D2,D1
  11334.     BLO.S    upmskp4
  11335.     MOVE.L    D2,D1
  11336. upmskp4    MOVE.L    A4,A1
  11337.     ADD.L    D1,A1
  11338.     RTS
  11339. upmplus    ADDQ.L    #1,A1
  11340.     RTS
  11341.  
  11342. CutBeg    CMP.W    #283,D0
  11343.     BHI    FadeDown
  11344.     CMP.W    #259,D0
  11345.     BHI    FadeUp
  11346.     BSR    WaitForButtonUp
  11347.     BSR    StorePtrCol
  11348.     BSR    SetWaitPtrCol
  11349.     MOVEQ    #0,D3
  11350.     MOVE.W    SampleInfo(PC),D3
  11351.     BEQ    ErrorRestoreCol
  11352.     LSL.W    #1,D3
  11353.     SUBQ.W    #1,D3
  11354.     MOVE.L    si_pointer,D0
  11355.     BEQ    ErrorRestoreCol
  11356.     MOVE.L    D0,A1
  11357.     MOVE.L    D0,A2
  11358.     MOVE.L    D0,A3
  11359.     ADD.L    SamplePos(PC),A2
  11360.     ADD.L    D3,A3
  11361. cbeloop    CMP.L    A3,A2
  11362.     BHS.S    cbeskip
  11363.     MOVE.B    (A2),D0
  11364.     CLR.B    (A2)+
  11365.     MOVE.B    D0,(A1)+
  11366.     BRA.S    cbeloop    
  11367. cbeskip    MOVE.L    si_pointer(PC),A2
  11368.     CLR.W    (A2)
  11369.     SUB.L    A2,A1
  11370.     MOVE.L    A1,D0
  11371.     LSR.L    #1,D0
  11372.     ADDQ.L    #1,D0
  11373.     AND.W    #$7FFF,D0
  11374.     MOVE.W    D0,22(A5)
  11375.     BSR    ShowSampleInfo
  11376.     BSR    RestorePtrCol
  11377.     BRA    DisplaySample
  11378.  
  11379. FadeUp    BSR    WaitForButtonUp
  11380.     BSR    StorePtrCol
  11381.     BSR    SetWaitPtrCol
  11382.     MOVEQ    #0,D3
  11383.     MOVE.W    SampleInfo(PC),D3
  11384.     BEQ    ErrorRestoreCol
  11385.     MOVEQ    #0,D1
  11386.     MOVE.L    SamplePos(PC),D2
  11387.     BEQ    ErrorRestoreCol
  11388.     MOVE.L    si_pointer,D0
  11389.     BEQ    ErrorRestoreCol
  11390.     MOVE.L    D0,A0
  11391.     LSR.W    #1,D2
  11392.     BEQ    ErrorRestoreCol
  11393.     MOVEQ    #0,D4
  11394. fuloop    MOVE.B    (A0),D0
  11395.     EXT.W    D0
  11396.     MULS    D1,D0
  11397.     DIVS    D2,D0
  11398.     MOVE.B    D0,(A0)+
  11399.     ADDQ.W    #1,D4
  11400.     MOVE.W    D4,D1
  11401.     LSR.W    #1,D1
  11402.     CMP.W    D2,D1
  11403.     BLO.S    fuloop
  11404.     BSR    RestorePtrCol
  11405.     BRA    DisplaySample
  11406.  
  11407. FadeDown
  11408.     BSR    WaitForButtonUp
  11409.     BSR    StorePtrCol
  11410.     BSR    SetWaitPtrCol
  11411.     MOVEQ    #0,D3
  11412.     MOVE.W    SampleInfo(PC),D3
  11413.     BEQ    ErrorRestoreCol
  11414.     LSL.L    #1,D3
  11415.     SUBQ.L    #1,D3 ;Length-1
  11416.     MOVE.L    SamplePos(PC),D2
  11417.     CMP.L    D3,D2
  11418.     BHS    ErrorRestoreCol
  11419.     MOVE.L    D3,D4 ; Copy length to D4
  11420.     SUB.L    D2,D3 ; Length-pos
  11421.     MOVE.L    D3,D2 ; Copy offset to D2
  11422.     MOVE.L    si_pointer,D0
  11423.     BEQ    ErrorRestoreCol
  11424.     MOVE.L    D0,A0
  11425.     LEA    (A0,D4.L),A0 ;Start at end of sample
  11426.     LSR.W    #1,D2
  11427.     BEQ    ErrorRestoreCol
  11428.     MOVEQ    #0,D1
  11429.     MOVEQ    #0,D4
  11430. fdloop    MOVE.B    (A0),D0
  11431.     EXT.W    D0
  11432.     MULS    D1,D0
  11433.     DIVS    D2,D0
  11434.     MOVE.B    D0,(A0)
  11435.     SUBQ.L    #1,A0
  11436.     ADDQ.W    #1,D4
  11437.     MOVE.W    D4,D1
  11438.     LSR.W    #1,D1
  11439.     CMP.W    D2,D1
  11440.     BLO.S    fdloop
  11441.     BSR    RestorePtrCol
  11442.     BRA    DisplaySample
  11443.  
  11444. ChangeVolume
  11445.     MOVE.W    SampleVol(PC),D2
  11446.     CMP.W    #243,D0
  11447.     BLS    DoChangeVol
  11448.     CMP.W    #283,D0
  11449.     BLS    Return2
  11450.     CMP.W    #295,D0
  11451.     BLS    shvoup
  11452.     SUBQ.W    #1,D2
  11453.     BTST    #2,$DFF016
  11454.     BNE.S    shvoskip
  11455.     SUB.W    #9,D2
  11456. shvoskip
  11457.     BPL.S    shvoskip2
  11458.     MOVEQ    #0,D2
  11459. shvoskip2
  11460.     MOVE.W    D2,SampleVol
  11461.     BSR    Wait_4000
  11462.     BRA.S    ShowVol
  11463. shvoup    ADDQ.L    #1,D2
  11464.     BTST    #2,$DFF016
  11465.     BNE.S    shvoskip3
  11466.     ADD.W    #9,D2
  11467. shvoskip3
  11468.     CMP.W    #999,D2
  11469.     BLS.S    shvoskip2
  11470.     MOVE.W    #999,SampleVol
  11471.     BSR    Wait_4000
  11472. ShowVol    MOVE.W    #3711,TextOffset
  11473.     MOVE.W    SampleVol(PC),WordNumber
  11474.     BSR    Print3DecDigits
  11475.     LEA    PercentText(PC),A0
  11476.     MOVE.W    #1,TextLength
  11477.     BRA    ShowText2
  11478.  
  11479. PercentText    dc.b '%',0
  11480.  
  11481. DoChangeVol
  11482.     BSR    WaitForButtonUp
  11483.     BSR    StorePtrCol
  11484.     BSR    SetWaitPtrCol
  11485.     MOVEQ    #0,D3
  11486.     MOVE.W    SampleInfo(PC),D3
  11487.     BEQ    ErrorRestoreCol
  11488.     LSL.W    #1,D3
  11489.     SUBQ.W    #1,D3
  11490.     MOVE.L    si_pointer,D0
  11491.     BEQ    ErrorRestoreCol
  11492.     MOVE.L    D0,A1
  11493.     MOVE.W    SampleVol(PC),D0
  11494. dcvloop    MOVE.B    (A1),D1
  11495.     EXT.W    D1
  11496.     MULS    D0,D1
  11497.     DIVS    #100,D1
  11498.     CMP.W    #127,D1
  11499.     BLE.S    dcvskip
  11500.     MOVEQ    #127,D1
  11501. dcvskip    CMP.W    #-128,D1
  11502.     BGE.S    dcvskp2
  11503.     MOVEQ    #-128,D1
  11504. dcvskp2    MOVE.B    D1,(A1)+
  11505.     DBRA    D3,dcvloop
  11506.     MOVE.L    si_pointer(PC),A1
  11507.     CLR.W    (A1)
  11508.     BSR    RestorePtrCol
  11509.     BRA    DisplaySample
  11510.  
  11511. Mix    BTST    #2,$DFF016
  11512.     BEQ    OldMix
  11513.     BSR    WaitForButtonUp
  11514.     BSR    StorePtrCol
  11515.     BSR    SetWaitPtrCol
  11516.     MOVE.W    #1,GetLineFlag
  11517.     MOVE.W    #4,MixCurPos
  11518. mixlopx    BSR    DisplayMix
  11519.     BSR    GetHexKey
  11520.     TST.B    D0
  11521.     BNE.S    mixnzro
  11522.     CMP.B    #68,MixChar
  11523.     BEQ    Mix2
  11524.     CMP.B    #69,MixChar
  11525.     BEQ    EndMix
  11526.     BTST    #2,$DFF016
  11527.     BEQ    EndMix
  11528. mixpchr    LEA    MixText(PC),A0
  11529.     LEA    FastHexTable+1,A1
  11530.     LSL.W    #1,D1
  11531.     MOVE.W    MixCurPos(PC),D0
  11532.     MOVE.B    (A1,D1.W),(A0,D0.W)
  11533. MixMoveRight
  11534.     MOVE.W    MixCurPos,D0
  11535.     ADDQ.W    #1,D0
  11536.     CMP.W    #6,D0
  11537.     BEQ.S    mmrp1
  11538.     CMP.W    #9,D0
  11539.     BEQ.S    mmrp2
  11540.     CMP.W    #15,D0
  11541.     BHS.S    mmrp3
  11542. mmrok    MOVE.W    D0,MixCurPos
  11543.     BRA    mixlopx
  11544. mmrp1    MOVEQ    #7,D0
  11545.     BRA.S    mmrok
  11546. mmrp2    MOVEQ    #13,D0
  11547.     BRA.S    mmrok
  11548. mmrp3    MOVEQ    #14,D0
  11549.     BRA.S    mmrok
  11550.  
  11551. mixnzro    CMP.B    #1,D0
  11552.     BEQ.S    MixMoveRight
  11553. MixMoveLeft
  11554.     MOVE.W    MixCurPos,D0
  11555.     SUBQ.W    #1,D0
  11556.     CMP.W    #4,D0
  11557.     BLO.S    mmlp1
  11558.     CMP.W    #6,D0
  11559.     BEQ.S    mmlp2
  11560.     CMP.W    #12,D0
  11561.     BEQ.S    mmlp3
  11562.     BRA.S    mmrok
  11563. mmlp1    MOVEQ    #4,D0
  11564.     BRA.S    mmrok
  11565. mmlp2    MOVEQ    #5,D0
  11566.     BRA.S    mmrok
  11567. mmlp3    MOVEQ    #8,D0
  11568.     BRA.S    mmrok
  11569.  
  11570. DisplayMix
  11571.     MOVE.W    #53,LineCurY
  11572.     MOVE.W    MixCurPos,D0
  11573.     LSL.W    #3,D0
  11574.     ADD.W    #132,D0
  11575.     MOVE.W    D0,LineCurX
  11576.     BSR    UpdateLineCurPos
  11577.     LEA    MixText(PC),A0
  11578.     MOVE.W    #1936,D1
  11579.     MOVEQ    #22,D0
  11580.     BSR    ShowText3
  11581.     BSR    Wait_4000
  11582.     BSR    Wait_4000
  11583.     BRA    Wait_4000
  11584.  
  11585. MixText    dc.b 'mix 01+02 to 03       '
  11586. MixChar    dc.b 0,0
  11587. MixCurPos dc.w 0
  11588. ToSam        dc.w 0
  11589. FromPtr1    dc.l 0
  11590. FromPtr2    dc.l 0
  11591. ToPtr        dc.l 0
  11592. MixPtr        dc.l 0
  11593. MixLength    dc.l 0
  11594.  
  11595. EndMix    CLR.B    RawKeyCode
  11596.     BSR    RestoreMix
  11597.     BRA    RestorePtrCol
  11598.  
  11599. RestoreMix
  11600.     CLR.W    GetLineFlag
  11601.     MOVE.W    #270,LineCurY
  11602.     CLR.W    LineCurX
  11603.     BSR    UpdateLineCurPos
  11604.     LEA    EditOpText3(PC),A0
  11605.     MOVE.W    #1936,D1
  11606.     MOVEQ    #22,D0
  11607.     BRA    ShowText3
  11608.  
  11609. Mix2    BSR    RestoreMix
  11610.     BSR    TurnOffVoices
  11611.     LEA    SamplePtrs,A2
  11612.     MOVEQ    #0,D0
  11613.     LEA    MixText+4(PC),A0
  11614.     BSR    HexToInteger2
  11615.     TST.W    D0
  11616.     BEQ    SamOutOfRange
  11617.     CMP.W    #$1F,D0
  11618.     BHI    SamOutOfRange
  11619.     LSL.W    #2,D0
  11620.     LEA    (A2,D0.W),A3
  11621.     MOVE.L    A3,FromPtr1
  11622.  
  11623.     MOVEQ    #0,D0
  11624.     LEA    MixText+7(PC),A0
  11625.     BSR    HexToInteger2
  11626.     TST.W    D0
  11627.     BEQ    SamOutOfRange
  11628.     CMP.W    #$1F,D0
  11629.     BHI    SamOutOfRange
  11630.     LSL.W    #2,D0
  11631.     LEA    (A2,D0.W),A3
  11632.     MOVE.L    A3,FromPtr2
  11633.  
  11634.     MOVEQ    #0,D0
  11635.     LEA    MixText+13(PC),A0
  11636.     BSR    HexToInteger2
  11637.     MOVE.W    D0,ToSam
  11638.     BEQ    SamOutOfRange
  11639.     CMP.W    #$1F,D0
  11640.     BHI    SamOutOfRange
  11641.     LSL.W    #2,D0
  11642.     LEA    (A2,D0.W),A3
  11643.     MOVE.L    A3,ToPtr
  11644.  
  11645.     MOVE.L    FromPtr1,A1
  11646.     MOVE.L    FromPtr2,A2
  11647.     MOVE.L    124(A1),D1
  11648.     MOVE.L    124(A2),D2
  11649.     CMP.L    D1,D2
  11650.     BLO.S    mixnswp
  11651.     EXG    D1,D2
  11652. mixnswp    TST.L    D1
  11653.     BEQ    SamEmptyError ; Both samples had length=0
  11654.     MOVE.L    D1,D0
  11655.     AND.L    #$FFFF,D0
  11656.     MOVE.L    D0,MixLength
  11657.     MOVE.L    #MEMF_CHIP!MEMF_CLEAR,D1
  11658.     MOVE.L    4.W,A6
  11659.     JSR    LVOAllocMem(A6)
  11660.     MOVE.L    D0,MixPtr
  11661.     BEQ    SamMemError ; No memory for new sample...
  11662.  
  11663.     LEA    MixingText(PC),A0
  11664.     BSR    ShowStatusText
  11665.     MOVE.L    FromPtr1(PC),A1
  11666.     MOVE.L    124(A1),D1
  11667.     MOVE.L    (A1),A1
  11668.     MOVE.L    FromPtr2(PC),A2
  11669.     MOVE.L    124(A2),D2
  11670.     MOVE.L    (A2),A2
  11671.     MOVE.L    MixPtr(PC),A3
  11672.     MOVE.L    MixLength,D3
  11673.     TST.W    D1
  11674.     BEQ.S    mixnd1
  11675.     SUBQ.W    #1,D1
  11676. mixnd1    TST.W    D2
  11677.     BEQ.S    mixnd2
  11678.     SUBQ.W    #1,D2
  11679. mixnd2    SUBQ.W    #1,D3
  11680.  
  11681. mixlop2    MOVE.B    (A1),D4
  11682.     EXT.W    D4
  11683.     MOVE.B    (A2),D0
  11684.     EXT.W    D0
  11685.     ADD.W    D4,D0
  11686.     TST.B    HalfClipFlag
  11687.     BEQ    mixhalf
  11688.     CMP.W    #127,D0
  11689.     BLE.S    mixnbig
  11690.     MOVEQ    #127,D0
  11691. mixnbig    CMP.W    #-128,D0
  11692.     BGE    mixokok
  11693.     MOVEQ    #-128,D0
  11694.     BRA    mixokok
  11695. mixhalf    ASR.W    #1,D0
  11696. mixokok    MOVE.B    D0,(A3)+
  11697.  
  11698.     TST.W    D1
  11699.     BEQ.S    zerd1
  11700.     ADDQ.L    #1,A1
  11701.     SUBQ.W    #1,D1
  11702.     BNE.S    zerd1
  11703.     SUB.L    A1,A1
  11704.  
  11705. zerd1    TST.W    D2
  11706.     BEQ.S    zerd2
  11707.     ADDQ.L    #1,A2
  11708.     SUBQ.W    #1,D2
  11709.     BNE.S    zerd2
  11710.     SUB.L    A2,A2
  11711.  
  11712. zerd2    DBRA    D3,mixlop2
  11713.     MOVE.W    ToSam(PC),InsNum
  11714.     BSR    FreeSample
  11715.     MOVE.L    ToPtr(PC),A0
  11716.     MOVE.L    MixPtr(PC),A1
  11717.     CLR.W    (A1)
  11718.     MOVE.L    A1,(A0)
  11719.     MOVE.L    MixLength(PC),124(A0)
  11720.     MOVE.L    SongDataPtr(PC),A0
  11721.     MOVE.W    ToSam(PC),D0
  11722.     SUBQ.W    #1,D0
  11723.     MULU    #30,D0
  11724.     LEA    20(A0,D0.W),A0
  11725.     MOVE.L    MixLength(PC),D0
  11726.     LSR.W    #1,D0
  11727.     MOVE.W    D0,22(A0)
  11728.     MOVE.W    #$0040,24(A0)
  11729.     MOVE.W    #$0000,26(A0)
  11730.     MOVE.W    #$0001,28(A0)
  11731.     BSR    RestorePtrCol
  11732.     BSR    ShowAllRight
  11733.     BSR    ShowSampleInfo
  11734.     BRA    DisplaySample
  11735.  
  11736. SamOutOfRange
  11737.     LEA    mixerrtext1(PC),A0
  11738.     BSR    ShowStatusText
  11739.     BRA    ErrorRestoreCol
  11740. SamEmptyError
  11741.     LEA    mixerrtext2(PC),A0
  11742.     BSR    ShowStatusText
  11743.     BRA    ErrorRestoreCol
  11744. SamMemError
  11745.     LEA    mixerrtext3(PC),A0
  11746.     BSR    ShowStatusText
  11747.     BRA    ErrorRestoreCol
  11748. OutOfMemErr
  11749.     LEA    mixerrtext3(PC),A0
  11750.     BSR    ShowStatusText
  11751.     BSR    SetErrorPtrCol
  11752.     MOVEQ    #0,D0
  11753.     RTS
  11754.  
  11755. mixerrtext1    dc.b 'not range 01-1F !',0
  11756. mixerrtext2    dc.b 'empty samples !!!',0
  11757. mixerrtext3    dc.b 'out of memory !!!',0
  11758. mixingtext    dc.b 'mixing samples...',0
  11759.  
  11760. OldMix    MOVE.L    SamplePos(PC),FlangePos
  11761. DoMix    BSR    StorePtrCol
  11762.     BSR    SetWaitPtrCol
  11763.     MOVEQ    #0,D2
  11764.     MOVE.W    SampleInfo(PC),D2 ; 22(A0)
  11765.     BEQ    Return2
  11766.     LSL.W    #1,D2
  11767.     MOVE.L    si_pointer(PC),D0
  11768.     BEQ    ErrorRestoreCol
  11769.     BSR    AllocBuffer
  11770.     MOVE.L    D0,A2
  11771.     MOVE.L    D0,A3
  11772.     MOVE.L    A1,A4
  11773.     ADD.L    D2,A3
  11774.     ADD.L    FlangePos(PC),A2
  11775.     CLR.L    ModOffset
  11776.     CLR.L    ModPos
  11777.     MOVEQ    #-1,D7
  11778. mixloop    ADDQ.L    #1,D7
  11779.     CMP.L    A3,A2
  11780.     BHS    mixskip
  11781.     MOVE.L    MarkStartOfs(PC),D0
  11782.     BMI.S    omxget
  11783.     MOVE.L    MarkEndOfs(PC),D1
  11784.     CMP.L    D0,D1
  11785.     BEQ.S    omxget
  11786.     CMP.L    D0,D7
  11787.     BLO.S    omxok2
  11788.     CMP.L    D1,D7
  11789.     BHI.S    omxok2
  11790. omxget    MOVE.B    (A2),D0
  11791.     EXT.W    D0
  11792.     MOVE.B    (A1),D1
  11793.     EXT.W    D1
  11794.     ADD.W    D1,D0
  11795.     TST.B    HalfClipFlag
  11796.     BEQ.S    omxhalf
  11797.     CMP.W    #127,D0
  11798.     BLE.S    omxnbig
  11799.     MOVEQ    #127,D0
  11800. omxnbig    CMP.W    #-128,D0
  11801.     BGE.S    omxokok
  11802.     MOVEQ    #-128,D0
  11803.     BRA.S    omxokok
  11804. omxhalf    ASR.W    #1,D0
  11805. omxokok    MOVE.B    D0,(A2)+
  11806.     BSR    UpdateMod
  11807.     BRA.S    mixloop
  11808. omxok2    ADDQ.L    #1,A2
  11809.     BSR    UpdateMod
  11810.     BRA.S    mixloop
  11811.  
  11812. mixskip    MOVE.L    si_pointer(PC),A1
  11813.     CLR.W    (A1)
  11814.     BSR    FreeBuffer
  11815.     BSR    RestorePtrCol
  11816.     BSR    WaitForButtonUp
  11817.     TST.W    DispOrRedraw
  11818.     BEQ    DisplaySample
  11819.     CLR.W    DispOrRedraw
  11820.     BRA    RedrawSample
  11821.  
  11822. DispOrRedraw    dc.w 0
  11823.  
  11824. AllocBuffer
  11825.     MOVE.L    D0,D7
  11826.     MOVE.L    D2,D0
  11827.     MOVE.L    D2,BufMemSize
  11828.     MOVE.L    #MEMF_PUBLIC!MEMF_CLEAR,D1
  11829.     MOVE.L    4.W,A6
  11830.     JSR    LVOAllocMem(A6)
  11831.     MOVE.L    D0,BufMemPtr
  11832.     BEQ    OutOfMemErr
  11833.     MOVE.L    D7,A0
  11834.     MOVE.L    D0,A1
  11835.     MOVE.L    BufMemSize(PC),D0
  11836.     SUBQ.L    #1,D0
  11837. albloop    MOVE.B    (A0)+,(A1)+
  11838.     DBRA    D0,albloop
  11839.     MOVE.L    BufMemPtr(PC),A1
  11840.     MOVE.L    D7,D0
  11841.     RTS
  11842.  
  11843. FreeBuffer
  11844.     MOVE.L    BufMemPtr(PC),D0
  11845.     BEQ    Return2
  11846.     MOVE.L    D0,A1
  11847.     MOVE.L    BufMemSize(PC),D0
  11848.     MOVE.L    4.W,A6
  11849.     JSR    LVOFreeMem(A6)
  11850.     CLR.L    BufMemPtr
  11851.     RTS
  11852.  
  11853. Echo    MOVE.L    SamplePos(PC),FlangePos
  11854.     BSR    WaitForButtonUp
  11855.     BSR    StorePtrCol
  11856.     BSR    SetWaitPtrCol
  11857.     MOVEQ    #0,D2
  11858.     MOVE.W    SampleInfo(PC),D2 ; 22(A0)
  11859.     BEQ    ErrorRestoreCol
  11860.     LSL.W    #1,D2
  11861.     MOVE.L    si_pointer(PC),D0
  11862.     BEQ    ErrorRestoreCol
  11863.     MOVE.L    D0,A1
  11864.     MOVE.L    D0,A2
  11865.     MOVE.L    D0,A3
  11866.     MOVE.L    D0,A4
  11867.     ADD.L    D2,A3
  11868.     ADD.L    FlangePos(PC),A2
  11869.     CLR.L    ModOffset
  11870.     CLR.L    ModPos
  11871. flaloop    CMP.L    A3,A2
  11872.     BHS    flaskip
  11873.     MOVE.B    (A2),D0
  11874.     EXT.W    D0
  11875.     MOVE.B    (A1),D1
  11876.     EXT.W    D1
  11877.     ADD.W    D1,D0
  11878.     ASR.W    #1,D0
  11879.     MOVE.B    D0,(A2)+
  11880.     BSR    UpdateMod
  11881.     BRA    flaloop
  11882. flaskip    MOVE.L    si_pointer(PC),A1
  11883.     CLR.W    (A1)
  11884.     BSR    RestorePtrCol
  11885.     TST.B    HalfClipFlag
  11886.     BEQ    DisplaySample
  11887.     MOVE.W    SampleVol,-(SP)
  11888.     MOVE.W    #200,SampleVol
  11889.     BSR    DoChangeVol
  11890.     MOVE.W    (SP)+,SampleVol
  11891.     BRA    DisplaySample
  11892.  
  11893. Filter2    MOVE.W    #1,DispOrRedraw
  11894. Filter    CLR.B    RawKeyCode
  11895.     LEA    FilteringText,A0
  11896.     BSR    ShowStatusText
  11897.     MOVE.L    #1,FlangePos
  11898.     MOVE.B    ModSpeed(PC),-(SP)
  11899.     MOVE.B    HalfClipFlag,-(SP)
  11900.     CLR.B    ModSpeed
  11901.     CLR.B    HalfClipFlag
  11902.     BSR    DoMix
  11903.     MOVE.B    (SP)+,HalfClipFlag
  11904.     MOVE.B    (SP)+,ModSpeed
  11905.     BRA    ShowAllRight
  11906.  
  11907. FilteringText    dc.b 'filtering',0
  11908.  
  11909. Boost    BSR.S    Boost3
  11910.     BRA    DisplaySample
  11911. Boost2    BSR.S    Boost3
  11912.     BRA    RedrawSample
  11913. Boost3    CLR.B    RawKeyCode
  11914.     BSR    WaitForButtonUp
  11915.     BSR    StorePtrCol
  11916.     BSR    SetWaitPtrCol
  11917.     LEA    BoostingText,A0
  11918.     BSR    ShowStatusText
  11919.     MOVEQ    #0,D3
  11920.     MOVE.W    SampleInfo(PC),D3
  11921.     BEQ    booend
  11922.     LSL.W    #1,D3
  11923.     SUBQ.W    #1,D3
  11924.     MOVE.L    si_pointer(PC),D0
  11925.     BEQ    booend
  11926.     MOVE.L    D0,A1
  11927.     MOVE.L    MarkStartOfs(PC),D0
  11928.     BMI.S    booskp1
  11929.     MOVE.L    MarkEndOfs(PC),D1
  11930.     SUB.L    D0,D1
  11931.     BEQ.S    booskp1
  11932.     MOVE.L    D1,D3
  11933.     MOVE.L    SamStart(PC),A1
  11934.     ADD.L    D0,A1
  11935. booskp1    MOVEQ    #0,D0
  11936. booloop    MOVE.B    (A1),D1
  11937.     EXT.W    D1
  11938.     MOVE.W    D1,D2
  11939.     SUB.W    D0,D1
  11940.     MOVE.W    D2,D0
  11941.     TST.W    D1
  11942.     BMI    booneg
  11943.     ASR.W    #2,D1
  11944.     ADD.W    D1,D2
  11945.     BRA    booskip
  11946. booneg    NEG.W    D1
  11947.     ASR.W    #2,D1
  11948.     SUB.W    D1,D2
  11949. booskip    CMP.W    #127,D2
  11950.     BLE    booskp2
  11951.     MOVEQ    #127,D2
  11952. booskp2    CMP.W    #-128,D2
  11953.     BGE    booskp3
  11954.     MOVEQ    #-128,D2
  11955. booskp3    MOVE.B    D2,(A1)+
  11956.     DBRA    D3,booloop
  11957.     MOVE.L    si_pointer(PC),A1
  11958.     CLR.W    (A1)
  11959. booend    BSR    ShowAllRight
  11960.     BRA    RestorePtrCol
  11961.     
  11962. BoostingText    dc.b 'boosting',0,0
  11963.  
  11964. XFade    BSR    WaitForButtonUp
  11965.     BSR    StorePtrCol
  11966.     BSR    SetWaitPtrCol
  11967.     MOVEQ    #0,D2
  11968.     MOVE.W    SampleInfo(PC),D2 ; 22(A0)
  11969.     BEQ    ErrorRestoreCol
  11970.     ADD.W    D2,D2
  11971.     MOVE.L    si_pointer(PC),D0
  11972.     BEQ    ErrorRestoreCol
  11973.     MOVE.L    D0,A1
  11974.     MOVE.L    D0,A2
  11975.     ADD.L    D2,A2
  11976. xfaloop    MOVE.B    (A1),D0
  11977.     EXT.W    D0
  11978.     MOVE.B    -(A2),D1
  11979.     EXT.W    D1
  11980.     ADD.W    D1,D0
  11981.     TST.B    HalfClipFlag
  11982.     BEQ    xfahalf
  11983.     CMP.W    #127,D0
  11984.     BLE    xfanbig
  11985.     MOVEQ    #127,D0
  11986. xfanbig    CMP.W    #-128,D0
  11987.     BGE    xfaokok
  11988.     MOVEQ    #-128,D0
  11989.     BRA    xfaokok
  11990. xfahalf    ASR.W    #1,D0
  11991. xfaokok    MOVE.B    D0,(A1)+
  11992.     MOVE.B    D0,(A2)
  11993.     CMP.L    A2,A1
  11994.     BLO.S    xfaloop
  11995.     MOVE.L    si_pointer(PC),A1
  11996.     CLR.W    (A1)
  11997.     BSR    RestorePtrCol
  11998.     BRA    DisplaySample
  11999.  
  12000. Backwards
  12001.     BSR    WaitForButtonUp
  12002.     BSR    StorePtrCol
  12003.     BSR    SetWaitPtrCol
  12004.     MOVEQ    #0,D2
  12005.     MOVE.W    22(A5),D2
  12006.     BEQ    ErrorRestoreCol
  12007.     MOVE.L    si_pointer(PC),D0
  12008.     BEQ    ErrorRestoreCol
  12009.     MOVE.L    D0,A1
  12010.     MOVE.L    D0,A2
  12011.     ADD.L    D2,D2
  12012.     ADD.L    D2,A2
  12013.     MOVE.L    MarkStartOfs(PC),D0
  12014.     BMI.S    bacloop
  12015.     MOVE.L    MarkEndOfs(PC),D1
  12016.     SUB.L    D0,D1
  12017.     BEQ.S    bacloop
  12018.     MOVE.L    SamStart(PC),A1
  12019.     ADD.L    D0,A1
  12020.     MOVE.L    A1,A2
  12021.     ADD.L    D1,A2
  12022. bacloop    MOVE.B    (A1),D0
  12023.     MOVE.B    -(A2),(A1)+
  12024.     MOVE.B    D0,(A2)
  12025.     CMP.L    A2,A1
  12026.     BLO.S    bacloop
  12027.     MOVE.L    si_pointer(PC),A1
  12028.     CLR.W    (A1)
  12029.     BSR    RestorePtrCol
  12030.     BRA    DisplaySample
  12031.  
  12032. Upsample
  12033.     BSR    WaitForButtonUp
  12034.     LEA    UpsampleText,A0
  12035.     BSR    AreYouSure
  12036.     BNE    Return2
  12037.     BSR    TurnOffVoices
  12038.     BSR    StorePtrCol
  12039.     BSR    SetWaitPtrCol
  12040.     MOVE.W    InsNum(PC),D0
  12041.     LSL.W    #2,D0
  12042.     LEA    SamplePtrs(PC),A0
  12043.     LEA    (A0,D0.W),A0
  12044.     MOVE.L    124(A0),D3
  12045.     CMP.L    #2,D3
  12046.     BLS    ErrorRestoreCol
  12047.     MOVE.L    (A0),D0
  12048.     BEQ    ErrorRestoreCol
  12049.     MOVE.L    D0,A2
  12050.     MOVE.L    D0,A4
  12051.     MOVE.L    D3,D4
  12052.     LSR.L    #1,D3
  12053.     BCLR    #0,D3
  12054.     MOVE.L    D3,D0
  12055.     MOVEQ    #MEMF_CHIP,D1
  12056.     MOVE.L    4.W,A6
  12057.     JSR    LVOAllocMem(A6)
  12058.     TST.L    D0
  12059.     BEQ.S    upserro
  12060.     MOVE.L    D0,A3
  12061.     MOVE.L    D0,D2
  12062.     MOVE.L    D3,D5
  12063.     SUBQ.L    #1,D3
  12064. upsloop    MOVE.B    (A2)+,(A3)+
  12065.     ADDQ.L    #1,A2
  12066.     DBRA    D3,upsloop
  12067.     MOVE.L    A4,A1
  12068.     MOVE.L    D4,D0
  12069.     MOVE.L    4.W,A6
  12070.     JSR    LVOFreeMem(A6)
  12071.     MOVE.W    InsNum(PC),D0
  12072.     LSL.W    #2,D0
  12073.     LEA    SamplePtrs(PC),A0
  12074.     LEA    (A0,D0.W),A0
  12075.     MOVE.L    D2,(A0)
  12076.     MOVE.L    D5,124(A0)
  12077.     MOVE.L    D2,A0
  12078.     CLR.W    (A0)
  12079.     MOVE.W    22(A5),D0
  12080.     LSR.W    #1,D0
  12081.     MOVE.W    D0,22(A5)
  12082.     MOVE.W    26(A5),D0
  12083.     LSR.W    #1,D0
  12084.     MOVE.W    D0,26(A5)
  12085.     MOVE.W    28(A5),D0
  12086.     LSR.W    #1,D0
  12087.     BNE    upsskip2
  12088.     MOVEQ    #1,D0
  12089. upsskip2
  12090.     MOVE.W    D0,28(A5)
  12091.     BSR    ShowSampleInfo
  12092.     BSR    WaitForButtonUp
  12093.     BSR    RestorePtrCol
  12094.     BRA    RedrawSample
  12095.  
  12096. upserro    BSR    RestorePtrCol
  12097.     BRA    OutOfMemErr
  12098.  
  12099. DownSample
  12100.     BSR    WaitForButtonUp
  12101.     TST.W    InsNum
  12102.     BEQ    NotSampleNull
  12103.     LEA    DownSampleText,A0
  12104.     BSR    AreYouSure
  12105.     BNE    Return2
  12106.     BSR    TurnOffVoices
  12107.     BSR    StorePtrCol
  12108.     BSR    SetWaitPtrCol
  12109.     MOVE.L    si_pointer(PC),D0
  12110.     BEQ    ErrorRestoreCol
  12111.     MOVEQ    #0,D0
  12112.     MOVE.W    SampleInfo(PC),D0
  12113.     BEQ    ErrorRestoreCol
  12114.     LSL.L    #1,D0
  12115.     CMP.L    #$FFFE,D0
  12116.     BHI    ErrorRestoreCol
  12117.     LSL.L    #1,D0
  12118.     CMP.L    #$FFFE,D0
  12119.     BLS    dnsskip
  12120.     MOVE.L    #$FFFE,D0
  12121. dnsskip    MOVE.L    D0,BufMemSize
  12122.     MOVEQ    #MEMF_CHIP,D1
  12123.     MOVE.L    4.W,A6
  12124.     JSR    LVOAllocMem(A6)
  12125.     MOVE.L    D0,BufMemPtr
  12126.     BEQ    SamMemError
  12127.     MOVE.L    si_pointer(PC),A1
  12128.     MOVE.L    D0,A2
  12129.     MOVE.L    BufMemSize,D3
  12130.     LSR.L    #1,D3
  12131.     SUBQ.L    #1,D3
  12132. dnsloop    MOVE.B    (A1)+,D0
  12133.     MOVE.B    D0,(A2)+
  12134.     MOVE.B    D0,(A2)+
  12135.     DBRA    D3,dnsloop
  12136.     BSR    FreeSample
  12137.     LEA    SamplePtrs,A0
  12138.     MOVE.W    InsNum(PC),D0
  12139.     LSL.W    #2,D0
  12140.     MOVE.L    BufMemPtr,(A0,D0.W)
  12141.     MOVE.L    BufMemSize,124(A0,D0.W)
  12142.     MOVE.W    22(A5),D0
  12143.     LSL.W    #1,D0
  12144.     CMP.W    #$7FFF,D0
  12145.     BLS    dnsok1
  12146.     MOVE.W    #$7FFF,D0
  12147. dnsok1    MOVE.W    D0,22(A5)
  12148.     MOVE.W    26(A5),D0
  12149.     LSL.W    #1,D0
  12150.     CMP.W    #$7FFF,D0
  12151.     BLS    dnsok2
  12152.     MOVE.W    #$7FFF,D0
  12153. dnsok2    MOVE.W    D0,26(A5)
  12154.     MOVE.W    28(A5),D0
  12155.     CMP.W    #1,D0
  12156.     BEQ    dnsok3
  12157.     LSL.W    #1,D0
  12158.     CMP.W    #$7FFF,D0
  12159.     BLS    dnsok3
  12160.     MOVE.W    #$7FFF,D0
  12161. dnsok3    MOVE.W    D0,28(A5)
  12162.     BSR    ShowSampleInfo
  12163.     BSR    WaitForButtonUp
  12164.     BSR    RestorePtrCol
  12165.     BRA    RedrawSample
  12166.  
  12167. SamplePos    dc.l    0
  12168. SampleVol    dc.w    100
  12169. FlangePos    dc.l    0
  12170. ModSpeed    dc.b    0
  12171. HalfClipFlag    dc.b    0
  12172. ModPos        dc.l    0
  12173. ModOffset    dc.l    0
  12174. BufMemPtr    dc.l    0
  12175. BufMemSize    dc.l    0
  12176.  
  12177. ;---- Save Song ----
  12178.  
  12179. SaveSong
  12180.     BSR    StopIt
  12181.     CLR.B    RawKeyCode
  12182.     MOVE.L    SongDataPtr(PC),A0
  12183.     LEA    SampleLengthAdd(PC),A1
  12184.     MOVEQ    #0,D0
  12185.     MOVEQ    #2,D1
  12186. sadloop    MOVE.W    (A1,D1.W),D2
  12187.     ADD.W    D2,42(A0,D0.W)
  12188.     ADD.W    #30,D0
  12189.     ADDQ.W    #2,D1
  12190.     CMP.W    #62,D1
  12191.     BNE    sadloop
  12192.  
  12193.     LEA    sd_pattpos(A0),A0
  12194.     MOVEQ    #0,D0
  12195.     MOVEQ    #0,D1
  12196.     MOVEQ    #0,D2
  12197.     CLR.W    HighPattNum
  12198. ssloop    MOVE.B    0(A0,D0.W),D1
  12199.     ADDQ.W    #1,D0
  12200.     CMP.W    #128,D0
  12201.     BHI    DoSaveSong
  12202.     MOVE.W    HighPattNum(PC),D2
  12203.     CMP.W    D2,D1
  12204.     BLS    ssloop
  12205.     MOVE.W    D1,HighPattNum
  12206.     BRA    ssloop
  12207.  
  12208. DoSaveSong
  12209.     LEA    SongsPath2,A0
  12210.     JSR    CopyPath
  12211.     MOVE.L    SongDataPtr(PC),A0
  12212.     MOVEQ    #19,D0
  12213. dssloop    MOVE.B    (A0)+,(A1)+
  12214.     DBRA    D0,dssloop
  12215.     MOVE.L    #FileName,FileNamePtr
  12216.     MOVE.L    SongDataPtr(PC),DiskDataPtr
  12217.     MOVE.L    #1084,DiskDataLength
  12218.     MOVEQ    #0,D0
  12219.     MOVE.W    HighPattNum,D0
  12220.     ADDQ.L    #1,D0
  12221.     LSL.L    #8,D0
  12222.     LSL.L    #2,D0
  12223.     ADD.L    D0,DiskDataLength
  12224.     MOVE.B    PackMode,D0
  12225.     BTST    #0,D0
  12226.     BEQ    dssnocr
  12227.     LEA    CrunchingText(PC),A0
  12228.     BSR    ShowStatusText
  12229.     BSR    Cruncher
  12230. dssnocr    BSR    DoSaveData
  12231.     MOVE.B    PackMode,D0
  12232.     BTST    #0,D0
  12233.     BEQ    dssnoc2
  12234.     LEA    DecrunchingText(PC),A0
  12235.     BSR    ShowStatusText
  12236.     BSR    Decruncher
  12237. dssnoc2    MOVE.L    SongDataPtr(PC),A0
  12238.     LEA    SampleLengthAdd(PC),A1
  12239.     MOVEQ    #0,D0
  12240.     MOVEQ    #2,D1
  12241. ssuloop    MOVE.W    (A1,D1.W),D2
  12242.     SUB.W    D2,42(A0,D0.W)
  12243.     ADD.W    #30,D0
  12244.     ADD.W    #2,D1
  12245.     CMP.W    #62,D1
  12246.     BNE    ssuloop
  12247.     BSR    ShowAllRight
  12248.     BRA    SetNormalPtrCol
  12249.  
  12250. Cruncher
  12251.     BSR    SetNormalPtrCol
  12252.     MOVE.L    SongDataPtr(PC),A0
  12253.     MOVE.L    A0,A1
  12254.     LEA    12(A1),A1
  12255.     MOVE.L    A1,SongPlus12Ptr
  12256.     MOVE.L    A0,A1
  12257.     ADD.L    #70716,A1    ; hoeh...
  12258.     MOVE.L    A1,SongPlus70kPtr
  12259.     MOVE.L    A0,A1
  12260.     ADD.L    #70716,A1
  12261.     SUB.L    DiskDataLength(PC),A1
  12262.     MOVE.L    A1,EndOfSongPtr
  12263.     MOVE.L    DiskDataLength(PC),RealSongLength
  12264.     MOVE.L    SongDataPtr(PC),A0
  12265.     ADD.L    DiskDataLength(PC),A0
  12266.     MOVE.L    SongDataPtr(PC),A1
  12267.     ADD.L    #70716,A1
  12268.     MOVE.L    DiskDataLength(PC),D0
  12269. cloop    MOVE.B    -(A0),-(A1)
  12270.     SUBQ.L    #1,D0
  12271.     BNE    cloop
  12272.     BSR    DoCrunch
  12273.     SUB.L    SongPlus12Ptr(PC),A2
  12274.     MOVE.L    A2,D0
  12275.     MOVE.L    D0,CrunchedSongLength
  12276.     MOVE.L    D0,D1
  12277.     ADD.L    SongPlus12Ptr(PC),D1
  12278.     MOVE.L    D1,DontKnowWhat
  12279.     MOVE.L    SongDataPtr(PC),A0
  12280.     MOVE.L    #'PACK',(A0)
  12281.     MOVE.L    CrunchedSongLength,4(A0)
  12282.     MOVE.L    RealSongLength(PC),8(A0)
  12283.     MOVE.L    SongDataPtr(PC),DiskDataPtr
  12284.     MOVE.L    CrunchedSongLength(PC),D0
  12285.     ADD.L    #12,D0
  12286.     MOVE.L    D0,DiskDataLength
  12287.     RTS    
  12288.  
  12289. EndOfSongPtr        dc.l    0
  12290. SongPlus70kPtr        dc.l    0
  12291. RealSongLength        dc.l    0
  12292. SongPlus12Ptr        dc.l    0
  12293. DontKnowWhat        dc.l    0
  12294. CrunchedSongLength    dc.l    0
  12295.  
  12296. DoCrunch
  12297.     MOVE.L    EndOfSongPtr(PC),A0
  12298.     MOVE.L    SongPlus70kPtr(PC),A1
  12299.     MOVE.L    SongPlus12Ptr(PC),A2
  12300.     MOVEQ    #1,D2
  12301.     CLR.W    D1
  12302. dcloop    BSR    DoCrunch2
  12303.     TST.B    D0
  12304.     BEQ    dcskip
  12305.     ADDQ.W    #1,D1
  12306.     CMP.W    #$0108,D1
  12307.     BNE    dcskip
  12308.     BSR    DoCrunch6
  12309. dcskip    CMP.L    A0,A1
  12310.     BGT    dcloop
  12311.     BSR    DoCrunch6
  12312.     BRA    DoCrunch8
  12313.  
  12314. DoCrunch2
  12315.     MOVE.L    A0,A3
  12316.     LEA    127(A3),A3
  12317.     CMP.L    A1,A3
  12318.     BLE    dc2skip
  12319.     MOVE.L    A1,A3
  12320. dc2skip    MOVEQ    #1,D5
  12321.     MOVE.L    A0,A5
  12322.     ADDQ.L    #1,A5
  12323. dc2_1    MOVE.B    (A0),D3
  12324.     MOVE.B    1(A0),D4
  12325.     MOVE.W    D3,$DFF1A2
  12326. dc2loop    CMP.B    (A5)+,D3
  12327.     BNE    dc2skip2
  12328.     CMP.B    (A5),D4
  12329.     BEQ    DoCrunch3
  12330. dc2skip2
  12331.     CMP.L    A5,A3
  12332.     BGT    dc2loop
  12333.     BRA    dc4_3
  12334.  
  12335. DoCrunch3
  12336.     SUBQ.L    #1,A5
  12337.     MOVE.L    A0,A4
  12338. dc3loop    MOVE.B    (A4)+,D3
  12339.     CMP.B    (A5)+,D3
  12340.     BNE    dc3skip
  12341.     CMP.L    A5,A3
  12342.     BGT    dc3loop
  12343. dc3skip    MOVE.L    A4,D3
  12344.     SUB.L    A0,D3
  12345.     SUBQ.L    #1,D3
  12346.     CMP.L    D3,D5
  12347.     BGE    dc4_2
  12348.     MOVE.L    A5,D4
  12349.     SUB.L    A0,D4
  12350.     SUB.L    D3,D4
  12351.     SUBQ.L    #1,D4
  12352.     CMP.L    #4,D3
  12353.     BLE    DoCrunch4
  12354.     MOVEQ    #6,D6
  12355.     CMP.L    #$00000101,D3
  12356.     BLT    dc3skip2
  12357.     MOVE.W    #$0100,D3
  12358. dc3skip2
  12359.     BRA    dc4_1
  12360.  
  12361. DoCrunch4
  12362.     MOVE.W    D3,D6
  12363.     SUBQ.W    #2,D6
  12364.     LSL.W    #1,D6
  12365. dc4_1    LEA    CrunchData3(PC),A6
  12366.     CMP.W    0(A6,D6.W),D4
  12367.     BGE    dc4_2
  12368.     MOVE.L    D3,D5
  12369.     MOVE.L    D4,CrunchData1
  12370.     MOVE.B    D6,CrunchData2
  12371. dc4_2    CMP.L    A5,A3
  12372.     BGT    dc2_1
  12373. dc4_3    CMP.L    #1,D5
  12374.     BEQ    DoCrunch5
  12375.     BSR    DoCrunch6
  12376.     MOVE.B    CrunchData2(PC),D6
  12377.     MOVE.L    CrunchData1(PC),D3
  12378.     MOVE.W    8(A6,D6.W),D0
  12379.     BSR    DoCrunch7
  12380.     MOVE.W    $0010(A6,D6.W),D0
  12381.     BEQ    dc4skip
  12382.     MOVE.L    D5,D3
  12383.     SUBQ.W    #1,D3
  12384.     BSR    DoCrunch7
  12385. dc4skip    MOVE.W    $0018(A6,D6.W),D0
  12386.     MOVE.W    $0020(A6,D6.W),D3
  12387.     BSR    DoCrunch7
  12388.     ADDQ.W    #1,$0028(A6,D6.W)
  12389.     ADD.L    D5,A0
  12390.     CLR.B    D0
  12391.     RTS    
  12392.  
  12393. DoCrunch5
  12394.     MOVE.B    (A0)+,D3
  12395.     MOVEQ    #8,D0
  12396.     BSR    DoCrunch7
  12397.     MOVEQ    #1,D0
  12398.     RTS    
  12399.  
  12400. CrunchData1    dc.l    0
  12401. CrunchData2    dc.b    0,0
  12402. CrunchData3    dc.w    $0100,$0200,$0400,$1000,8,9,10,8
  12403.         dc.w    0,0,0,8,2,3,3,3,1,4,5,6,0,0,0,0
  12404. CrunchData4    dc.w    0
  12405. CrunchData5    dc.w    0
  12406.  
  12407. DoCrunch6
  12408.     TST.W    D1
  12409.     BEQ    Return2
  12410.     MOVE.W    D1,D3
  12411.     CLR.W    D1
  12412.     CMP.W    #9,D3
  12413.     BGE    dc6_2
  12414.     ADDQ.W    #1,CrunchData4
  12415.     SUBQ.W    #1,D3
  12416.     MOVEQ    #5,D0
  12417.     BRA    DoCrunch7
  12418.  
  12419. dc6_2    ADDQ.W    #1,CrunchData5
  12420.     SUB.W    #9,D3
  12421.     OR.W    #$0700,D3
  12422.     MOVEQ    #11,D0
  12423. DoCrunch7
  12424.     SUBQ.W    #1,D0
  12425. dc7loop    LSR.L    #1,D3
  12426.     ROXL.L    #1,D2
  12427.     BCS    dc8_2
  12428.     DBRA    D0,dc7loop
  12429.     RTS    
  12430.  
  12431. DoCrunch8
  12432.     CLR.W    D0
  12433. dc8_2    MOVE.L    D2,(A2)+
  12434.     MOVEQ    #1,D2
  12435.     DBRA    D0,dc7loop
  12436.     RTS
  12437.  
  12438.  
  12439. Decruncher
  12440.     MOVE.L    SongDataPtr(PC),A0
  12441.     LEA    12(A0),A0
  12442.     MOVE.L    EndOfSongPtr(PC),A1
  12443.     MOVE.L    CrunchedSongLength(PC),D0
  12444.     MOVE.L    RealSongLength(PC),D1
  12445.     BSR    DoDecrunch
  12446.     MOVE.L    EndOfSongPtr(PC),A0
  12447.     MOVE.L    SongDataPtr(PC),A1
  12448.     MOVE.L    RealSongLength(PC),D0
  12449. ddcloop    MOVE.B    (A0)+,(A1)+
  12450.     SUBQ.L    #1,D0
  12451.     BNE    ddcloop
  12452.     MOVE.L    SongDataPtr(PC),A0
  12453.     ADD.L    #$0001143C,A0
  12454.     MOVE.L    SongDataPtr(PC),A1
  12455.     ADD.L    RealSongLength(PC),A1
  12456.     SUB.L    A1,A0
  12457.     MOVE.L    A0,D0
  12458. ddcloop2
  12459.     CLR.B    (A1)+
  12460.     SUBQ.L    #1,D0
  12461.     BNE    ddcloop2
  12462.     RTS    
  12463.  
  12464. DoDecrunch
  12465.     ADD.L    D0,A0
  12466.     MOVE.L    D1,A2
  12467.     ADD.L    A1,A2
  12468.     MOVE.L    -(A0),D0
  12469. dec_1    LSR.L    #1,D0
  12470.     BNE.S    decskip
  12471.     BSR.S    dec5
  12472. decskip    BCS.S    dec3
  12473.     MOVEQ    #8,D1
  12474.     MOVEQ    #1,D3
  12475.     LSR.L    #1,D0
  12476.     BNE.S    decskip2
  12477.     BSR.S    dec5
  12478. decskip2
  12479.     BCS.S    dec4_1
  12480.     MOVEQ    #3,D1
  12481.     CLR.W    D4
  12482. dec_2    BSR.S    dec6
  12483.     MOVE.W    D2,D3
  12484.     ADD.W    D4,D3
  12485. decloop1
  12486.     MOVEQ    #7,D1
  12487. decloop2
  12488.     LSR.L    #1,D0
  12489.     BNE.S    decskip3
  12490.     BSR.S    dec5
  12491. decskip3
  12492.     ROXL.L    #1,D2
  12493.     DBRA    D1,decloop2
  12494.     MOVE.B    D2,-(A2)
  12495.     DBRA    D3,decloop1
  12496.     BRA.S    dec4_3
  12497.  
  12498. dec2    MOVEQ    #8,D1
  12499.     MOVEQ    #8,D4
  12500.     BRA.S    dec_2
  12501.  
  12502. dec3    MOVEQ    #2,D1
  12503.     BSR.S    dec6
  12504.     CMP.B    #2,D2
  12505.     BLT.S    dec4
  12506.     CMP.B    #3,D2
  12507.     BEQ.S    dec2
  12508.     MOVEQ    #8,D1
  12509.     BSR.S    dec6
  12510.     MOVE.W    D2,D3
  12511.     MOVE.W    #8,D1
  12512.     BRA.S    dec4_1
  12513.  
  12514. dec4    MOVE.W    #9,D1
  12515.     ADD.W    D2,D1
  12516.     ADDQ.W    #2,D2
  12517.     MOVE.W    D2,D3
  12518. dec4_1    BSR.S    dec6
  12519. dec4_2    SUBQ.W    #1,A2
  12520.     MOVE.B    0(A2,D2.W),(A2)
  12521.     DBRA    D3,dec4_2
  12522. dec4_3    CMP.L    A2,A1
  12523.     BLT.S    dec_1
  12524.     RTS    
  12525.  
  12526. dec5    MOVE.L    -(A0),D0
  12527.     MOVE.W    D0,$DFF1A2
  12528.     MOVE    #$10,CCR
  12529.     ROXR.L    #1,D0
  12530.     RTS    
  12531.  
  12532. dec6    SUBQ.W    #1,D1
  12533.     CLR.W    D2
  12534. dec6loop
  12535.     LSR.L    #1,D0
  12536.     BNE.S    dec6skip
  12537.     MOVE.L    -(A0),D0
  12538.     MOVE.W    D0,$DFF1A2
  12539.     MOVE    #$10,CCR
  12540.     ROXR.L    #1,D0
  12541. dec6skip
  12542.     ROXL.L    #1,D2
  12543.     DBRA    D1,dec6loop
  12544.     RTS    
  12545.  
  12546. LoadModule
  12547.     MOVE.W    #1,LoadInProgress
  12548.     BSR    DoClearSong
  12549.     BSR    ClrSampleInfo
  12550.     BSR    SetDiskPtrCol
  12551.     LEA    ModulesPath2,A0
  12552.     JSR    CopyPath
  12553.     LEA    DirInputName,A0
  12554.     MOVEQ    #DirNameLength-1,D0
  12555. lmloop2    MOVE.B    (A0)+,(A1)+
  12556.     DBRA    D0,lmloop2
  12557.     LEA    LoadingModuleText(PC),A0
  12558.     BSR    ShowStatusText
  12559.     MOVE.L    DOSbase(PC),A6
  12560.     MOVE.L    #FileName,D1
  12561.     MOVE.L    #1005,D2
  12562.     JSR    LVOOpen(A6)
  12563.     MOVE.L    D0,FileHandle
  12564.     BEQ    CantOpenFile
  12565.     MOVE.L    D0,D1
  12566.     MOVE.L    SongDataPtr(PC),D2
  12567.     MOVE.L    #1084,D3
  12568.     JSR    LVORead(A6)
  12569.     MOVE.L    SongDataPtr(PC),A0
  12570.     CMP.L    #'PP20',(A0)
  12571.     BEQ    PowerPacked
  12572.     MOVE.B    #127,sd_numofpatt+1(A0) ; Set maxpatt to 127
  12573.     CMP.L    #'M.K.',sd_mahokakt(A0)    ; M.K. again...
  12574.     BEQ    lmskip
  12575.     BSR    MahoneyAndKaktus
  12576.     BNE    lmskip
  12577.     MOVE.L    FileHandle(PC),D1
  12578.     MOVE.L    #600,D2
  12579.     MOVEQ    #-1,D3
  12580.     JSR    LVOSeek(A6)
  12581. lmskip    LEA    LoadingModuleText(PC),A0
  12582.     BSR    ShowStatusText
  12583.     MOVE.L    SongDataPtr(PC),A0
  12584.     LEA    sd_pattpos(A0),A0
  12585.     MOVEQ    #0,D0
  12586.     MOVE.B    -1(A0),D0
  12587.     MOVEQ    #0,D3
  12588. lmloop3    CMP.B    (A0)+,D3
  12589.     BHI    lmskip2
  12590.     MOVE.B    -1(A0),D3
  12591. lmskip2    DBRA    D0,lmloop3
  12592.     ADDQ.W    #1,D3
  12593.     MULU    #1024,D3
  12594.     MOVE.L    FileHandle(PC),D1
  12595.     MOVE.L    SongDataPtr(PC),D2
  12596.     ADD.L    #1084,D2
  12597.     MOVE.L    DOSBase,A6
  12598.     JSR    LVORead(A6)
  12599.     CLR.L    PatternNumber
  12600.     CLR.L    CurrPos
  12601.     BSR    RedrawPattern
  12602.     CLR.W    ScrPattPos
  12603.     BSR    SetScrPatternPos
  12604.     MOVE.W    #1,InsNum
  12605.     BSR    CheckAbort
  12606.     BEQ    rmiend
  12607.     TST.B    AutoExitFlag
  12608.     BEQ    readinstrloop
  12609.     JSR    ExitFromDir
  12610. readinstrloop
  12611.     TST.B    NosamplesFlag
  12612.     BNE    rmiend
  12613.     BSR    CheckAbort
  12614.     BEQ    rmiend
  12615.     BSR    ShowSampleInfo
  12616.     MOVE.W    InsNum(PC),TuneUp
  12617.     JSR    DoShowFreeMem
  12618.     MOVE.L    SongDataPtr(PC),A0
  12619.     MOVE.W    InsNum(PC),D7
  12620.     MULU    #30,D7
  12621.     MOVEQ    #0,D0
  12622.     MOVE.W    12(A0,D7.W),D0
  12623.     BEQ    rminext
  12624.     ADD.L    D0,D0
  12625.     MOVE.L    4.W,A6
  12626.     MOVE.L    #MEMF_CHIP!MEMF_CLEAR,D1
  12627.     MOVE.L    D0,-(SP)
  12628.     JSR    LVOAllocMem(A6)
  12629.     MOVE.L    (SP)+,D6
  12630.     TST.L    D0
  12631.     BNE    ReadModInstrument
  12632.     BSR    OutOfMemErr
  12633.     MOVE.L    DOSbase(PC),A6
  12634.     MOVE.L    FileHandle(PC),D1
  12635.     MOVE.L    D6,D2
  12636.     MOVEQ    #0,D3
  12637.     BRA    rminext
  12638.  
  12639. ReadModInstrument
  12640.     MOVE.W    InsNum(PC),D7
  12641.     LSL.W    #2,D7
  12642.     LEA    SamplePtrs(PC),A0
  12643.     MOVE.L    D0,0(A0,D7.W)
  12644.     MOVE.L    D6,124(A0,D7.W)
  12645.     MOVE.L    DOSbase(PC),A6
  12646.     MOVE.L    FileHandle(PC),D1
  12647.     MOVE.L    D0,D2
  12648.     MOVE.L    D6,D3
  12649.     JSR    LVORead(A6)
  12650.     BSR    RedrawSample
  12651. rminext    ADDQ.W    #1,InsNum
  12652.     CMP.W    #32,InsNum
  12653.     BNE    readinstrloop
  12654. rmiend    MOVE.L    FileHandle(PC),D1
  12655.     MOVE.L    DOSbase(PC),A6
  12656.     JSR    LVOClose(A6)
  12657.     MOVE.W    #1,InsNum
  12658.     MOVE.L    #6,CurrSpeed
  12659.     CLR.W    LoadInProgress
  12660.     BSR    ShowAllRight
  12661.     JSR    SetNormalPtrCol
  12662.     BSR    CheckInstrLengths
  12663.     BSR    ShowSampleInfo
  12664.     BSR    RedrawSample
  12665.     JMP    DoShowFreeMem
  12666.  
  12667. PowerPacked
  12668.     LEA    PowerPackedText,A0
  12669.     BSR    ShowStatusText
  12670.     JSR    SetErrorPtrCol
  12671.     BSR    DoClearSong
  12672.     BSR    ClrSampleInfo
  12673.     BRA    rmiend
  12674.  
  12675. PowerPackedText    dc.b "Powerpacker mod.!",0
  12676.  
  12677.  
  12678. SaveModule
  12679.     JSR    StorePtrCol
  12680.     JSR    SetDiskPtrCol
  12681.     MOVE.L    SongDataPtr(PC),A0
  12682.     LEA    sd_pattpos(A0),A0
  12683.     MOVEQ    #0,D0
  12684.     MOVEQ    #0,D1
  12685.     MOVEQ    #0,D2
  12686.     CLR.W    HighPattNum
  12687. smloop    MOVE.B    0(A0,D0.W),D1
  12688.     ADDQ.W    #1,D0
  12689.     CMP.W    #128,D0
  12690.     BHI    DoSaveModule
  12691.     MOVE.W    HighPattNum(PC),D2
  12692.     CMP.W    D2,D1
  12693.     BLS    smloop
  12694.     MOVE.W    D1,HighPattNum
  12695.     BRA    smloop
  12696.  
  12697. DoSaveModule
  12698.     LEA    ModulesPath2,A0
  12699.     JSR    CopyPath
  12700.     MOVE.B    #'m',(A1)+
  12701.     MOVE.B    #'o',(A1)+
  12702.     MOVE.B    #'d',(A1)+
  12703.     MOVE.B    #'.',(A1)+
  12704.     MOVE.L    SongDataPtr(PC),A0
  12705.     MOVEQ    #19,D0
  12706. dsmloop2
  12707.     MOVE.B    (A0)+,(A1)+
  12708.     DBRA    D0,dsmloop2
  12709.     MOVE.L    SongDataPtr(PC),A0
  12710.     MOVE.L    A0,DiskDataPtr
  12711.     MOVE.L    #1084,DiskDataLength
  12712.     MOVEQ    #0,D0
  12713.     MOVE.W    HighPattNum(PC),D0
  12714.     ADDQ.L    #1,D0
  12715.     LSL.L    #8,D0
  12716.     LSL.L    #2,D0
  12717.     ADD.L    D0,DiskDataLength    ; Add 1024 x NumOfPatt
  12718.     MOVE.B    #127,sd_numofpatt+1(A0) ; Set maxpatt to 127
  12719.     MOVE.L    #'M.K.',sd_mahokakt(A0)    ; M.K. again...
  12720.     LEA    SavingModuleText(PC),A0
  12721.     BSR    ShowStatusText
  12722.     BSR    OpenModForWrite
  12723.     BNE    CantOpenFile
  12724.     BSR    WriteModuleData
  12725.     BNE    WriteModError
  12726.     MOVE.W    InsNum(PC),SaveInstrNum
  12727.     MOVEQ    #1,D6
  12728. saveinstrloop
  12729.     MOVE.W    D6,InsNum
  12730.     BSR    ShowSampleInfo
  12731.     BSR    WriteInstrument
  12732.     BNE    WriteModError
  12733.     ADDQ.B    #1,D6
  12734.     CMP.B    #32,D6
  12735.     BNE    saveinstrloop
  12736.     BSR    CloseWriteMod
  12737.     MOVE.W    SaveInstrNum(PC),InsNum
  12738.     BSR    ShowSampleInfo
  12739.     BSR    ShowAllRight
  12740.     JMP    RestorePtrCol
  12741.  
  12742. SaveInstrNum    dc.w 0
  12743.  
  12744. WriteModError
  12745.     BSR    CloseWriteMod
  12746.     BRA    CantSaveFile
  12747.  
  12748. WriteInstrument
  12749.     MOVE.W    D6,D0
  12750.     LSL.W    #2,D0
  12751.     LEA    SamplePtrs(PC),A0
  12752.     MOVE.L    0(A0,D0.W),D1
  12753.     BEQ    Return2
  12754.     MOVE.L    124(A0,D0.W),D0
  12755.     BEQ    Return2
  12756.     MOVE.L    D1,DiskDataPtr
  12757.     MOVE.L    SongDataPtr(PC),A0
  12758.     LEA    12(A0),A0
  12759.     MOVE.W    D6,D0
  12760.     MULU    #30,D0
  12761.     ADD.L    D0,A0
  12762.     MOVEQ    #0,D0
  12763.     MOVE.W    (A0),D0
  12764.     LSL.L    #1,D0
  12765.     MOVE.L    D0,DiskDataLength
  12766.     BNE    WriteModuleData
  12767.     RTS
  12768.  
  12769. OpenModForWrite
  12770.     MOVE.L    DOSbase(PC),A6
  12771.     MOVE.L    #FileName,D1
  12772.     MOVE.L    #1006,D2
  12773.     JSR    LVOOpen(A6)
  12774.     MOVE.L    D0,D7
  12775.     BEQ    wmfailed
  12776.     MOVEQ    #0,D0
  12777.     RTS
  12778.  
  12779. WriteModuleData
  12780.     MOVE.L    DOSbase(PC),A6
  12781.     MOVE.L    D7,D1
  12782.     MOVE.L    DiskDataPtr(PC),D2
  12783.     MOVE.L    DiskDataLength(PC),D3
  12784.     JSR    LVOWrite(A6)
  12785.     TST.L    D0
  12786.     BEQ    wmfailed
  12787.     MOVEQ    #0,D0
  12788.     RTS
  12789.  
  12790. wmfailed
  12791.     MOVEQ    #-1,D0
  12792.     RTS    
  12793.  
  12794. CloseWriteMod
  12795.     MOVE.L    DOSbase(PC),A6
  12796.     MOVE.L    D7,D1
  12797.     JMP    LVOClose(A6)
  12798.  
  12799. ;---- Load PLST ----
  12800.  
  12801. LoadPLST
  12802.     LEA    LoadPLSTText,A0
  12803.     JSR    AreYouSure
  12804.     BNE    Return2
  12805.     JSR    WaitForButtonUp
  12806.     LEA    LoadingPLSTText(PC),A0
  12807.     BSR    ShowStatusText
  12808. DoLoadPLST
  12809.     JSR    StorePtrCol
  12810.     LEA    PTPath,A0
  12811.     JSR    CopyPath
  12812.     LEA    PLSTName(PC),A0
  12813.     MOVEQ    #4,D0
  12814. dlploop    MOVE.B    (A0)+,(A1)+
  12815.     DBRA    D0,dlploop
  12816.     MOVE.L    #FileName,D1
  12817.     MOVE.L    #1005,D2
  12818.     MOVE.L    DOSbase(PC),A6
  12819.     JSR    LVOOpen(A6)
  12820.     MOVE.L    D0,D7
  12821.     BEQ    PLSTOpenErr
  12822.     JSR    SetDiskPtrCol
  12823.     CLR.L    PresetTotal
  12824.     BSR.S    AllocPLST
  12825.     MOVE.L    PLSTmem(PC),D2
  12826.     BEQ    PLSTMemErr2
  12827.     MOVE.L    D7,D1
  12828.     MOVE.L    PLSTallocsize,D3
  12829.     MOVE.L    DOSBase(PC),A6
  12830.     JSR    LVORead(A6)
  12831.     MOVE.L    D0,MaxPLSTOffset
  12832.     DIVU    #30,D0
  12833.     MOVE.W    D0,PresetTotal
  12834. cloplst    MOVE.L    D7,D1
  12835.     MOVE.L    DOSbase(PC),A6
  12836.     JSR    LVOClose(A6)
  12837.     BSR    PLSTCheckNum
  12838.     BSR    ShowAllRight
  12839.     JMP    RestorePtrCol
  12840.  
  12841. PLSTname    dc.b    'PLST',0,0
  12842.  
  12843. AllocPLST
  12844.     BSR.S    FreePLST
  12845.     MOVE.W    MaxPLSTEntries,D0
  12846.     BEQ    Return2
  12847.     MULU    #30,D0
  12848.     MOVE.L    D0,PLSTAllocSize
  12849.     MOVE.L    #MEMF_PUBLIC!MEMF_CLEAR,D1
  12850.     MOVE.L    4.W,A6
  12851.     JSR    LVOAllocMem(A6)
  12852.     MOVE.L    D0,PLSTmem
  12853.     MOVE.W    MaxPLSTEntries,MaxPLSTEntries2
  12854.     RTS
  12855.  
  12856. FreePLST
  12857.     CLR.W    MaxPLSTEntries2
  12858.     CLR.L    MaxPLSTOffset
  12859.     CLR.W    PresetTotal
  12860.     MOVE.L    PLSTmem,D0
  12861.     BEQ    Return2
  12862.     MOVE.L    D0,A1
  12863.     MOVE.L    PLSTAllocSize,D0
  12864.     MOVE.L    4.W,A6
  12865.     JSR    LVOFreeMem(A6)
  12866.     CLR.L    PLSTmem
  12867.     RTS
  12868.  
  12869. PLSTMemErr2
  12870.     BSR.S    PLSTMemErr
  12871.     BRA    cloplst
  12872.  
  12873. PLSTMemErr
  12874.     TST.W    MaxPLSTEntries
  12875.     BEQ.S    reptrco
  12876.     BSET    #0,InitError
  12877.     LEA    PLSTMemText,A0
  12878. plster    BSR.S    ShowStatusText
  12879.     MOVE.W    #50,WaitTime
  12880.     JMP    ErrorRestoreCol
  12881. reptrco    JMP    RestorePtrCol
  12882. PLSTOpenErr
  12883.     TST.W    MaxPLSTEntries
  12884.     BEQ.S    reptrco
  12885.     BSET    #1,InitError
  12886.     LEA    PLSTOpenText,A0
  12887.     BRA.S    plster
  12888.  
  12889. PLSTMemText    dc.b 'no mem for plst !',0
  12890. PLSTOpenText    dc.b 'plst not found ! ',0
  12891. InitError    dc.b 0,0
  12892.  
  12893.  
  12894. ShowAllRight
  12895.     MOVEM.L    D0-D7/A0-A6,-(SP)
  12896.     LEA    AllRightText(PC),A0
  12897.     BSR.S    ShowStatusText
  12898.     MOVEM.L    (SP)+,D0-D7/A0-A6
  12899.     RTS    
  12900.  
  12901. ShowStatusText
  12902.     MOVE.L    TextBplPtr(PC),A1
  12903.     ADD.L    #5131,A1
  12904.     MOVEQ    #4,D0
  12905. stloop1    MOVEQ    #16,D1
  12906. stloop2    CLR.B    (A1)+
  12907.     DBRA    D1,stloop2
  12908.     LEA    23(A1),A1
  12909.     DBRA    D0,stloop1
  12910.     MOVE.L    A0,A1
  12911.     MOVE.W    #5131,D1
  12912.     MOVEQ    #-1,D0
  12913. stloop3    ADDQ.W    #1,D0
  12914.     TST.B    (A1)+
  12915.     BNE.S    stloop3
  12916.     BRA    ShowText3
  12917.  
  12918. ;---- Redraw Pattern ----
  12919.  
  12920. RedrawPattern
  12921.     TST.W    SamScrEnable
  12922.     BNE    Return2
  12923.     SF    PattRfsh
  12924.     MOVE.W    #5121,TextOffset
  12925.     MOVE.W    PatternNumber+2(PC),WordNumber
  12926.     BSR    Print2DecDigits ; Print PatternNumber
  12927.     MOVE.L    SongDataPtr(PC),A6
  12928.     LEA    $043C(A6),A6
  12929.     MOVE.L    PatternNumber,D6
  12930.     LSL.L    #8,D6
  12931.     LSL.L    #2,D6
  12932.     ADD.L    D6,A6
  12933.     MOVE.W    #7521,TextOffset
  12934.     CLR.L    PPattPos
  12935.     LEA    PeriodTable(PC),A2
  12936.     LEA    RedrawBuffer(PC),A3
  12937.     LEA    FastHexTable(PC),A4
  12938.     MOVEQ    #'0',D4
  12939.     MOVE.B    BlankZeroFlag,D5
  12940.     MOVEQ    #63,D6
  12941. rpnxpos    MOVEQ    #3,D7
  12942.     MOVE.W    PPattPos+2(PC),WordNumber
  12943.     BSR    Print2DecDigits ; Print PatternPosition
  12944.     ADDQ.W    #1,TextOffset
  12945.     ADDQ.L    #1,PPattPos
  12946. rploop    MOVEQ    #0,D0
  12947.     MOVEQ    #0,D1
  12948.     MOVE.W    (A6),D1
  12949.     AND.W    #$0FFF,D1
  12950.     BNE.S    rpfind
  12951.     MOVE.L    #'--- ',(A3)
  12952.     BRA.S    rpskip
  12953. rpfind    MOVEQ    #36,D2
  12954. rpfindloop
  12955.     CMP.W    (A2,D0.W),D1
  12956.     BEQ.S    rpfound
  12957.     ADDQ.L    #2,D0
  12958.     DBRA    D2,rpfindloop
  12959.     MOVE.L    #'??? ',(A3)
  12960.     BRA.S    rpskip
  12961. rpfound    LSL.L    #1,D0
  12962.     ADD.L    NoteNamesPtr(PC),D0
  12963.     MOVE.L    D0,A0
  12964.     MOVE.L    (A0),(A3)
  12965. rpskip    MOVE.B    (A6)+,D0
  12966.     LSR.B    #4,D0
  12967.     ADD.B    #'0',D0
  12968.     MOVE.B    D0,3(A3)
  12969.     MOVE.B    (A6)+,D0
  12970.     MOVEQ    #0,D0
  12971.     MOVE.B    (A6)+,D0
  12972.     ADD.W    D0,D0
  12973.     MOVE.W    (A4,D0.W),4(A3)
  12974.     MOVEQ    #0,D0
  12975.     MOVE.B    (A6)+,D0
  12976.     ADD.W    D0,D0
  12977.     MOVE.W    (A4,D0.W),6(A3)
  12978.  
  12979.     TST.B    D5
  12980.     BEQ.S    rpskp3
  12981.     CMP.B    3(A3),D4
  12982.     BNE.S    rpskp3
  12983.     MOVE.B    #' ',3(A3)
  12984. rpskp3    MOVE.W    #9,TextLength
  12985.     MOVE.L    A3,ShowTextPtr
  12986.     BSR    ShowText
  12987.     DBRA    D7,rploop  ; Next Channel
  12988.     ADD.W    #241,TextOffset
  12989.     DBRA    D6,rpnxpos ; Next PattPos
  12990.     RTS
  12991.  
  12992. RedrawBuffer    dc.b '---00000 ',0
  12993.  
  12994.  
  12995. ShowPosition
  12996.     MOVE.L    SongDataPtr(PC),A0
  12997.     LEA    952(A0),A0
  12998.     ADD.L    CurrPos(PC),A0
  12999.     MOVE.B    (A0),WordNumber+1
  13000.     MOVE.B    (A0),PattRfshNum+3
  13001.     MOVEQ    #0,D1
  13002.     MOVE.B    (A0),D1
  13003.     CMP.B    LongFFFF+3(PC),D1
  13004.     BEQ.S    spskip2
  13005.     ST    PattRfsh
  13006. spskip2    MOVE.W    #608,TextOffset
  13007.     MOVE.B    (A0),LongFFFF+3
  13008.     CMP.W    #0,CurrScreen
  13009.     BEQ.S    spokok
  13010.     CMP.W    #1,CurrScreen
  13011.     BEQ.S    spokok
  13012.     CMP.W    #6,CurrScreen
  13013.     BEQ.S    spokok
  13014.     RTS
  13015. spokok    BSR    Print4DecDigits
  13016.     MOVE.W    CurrPos+2,WordNumber
  13017.     MOVE.W    #168,TextOffset
  13018.     BRA    Print4DecDigits
  13019.  
  13020.  
  13021. ShowSongLength
  13022.     CMP.W    #2,CurrScreen
  13023.     BEQ.S    ShowSongName
  13024.     CMP.W    #3,CurrScreen
  13025.     BEQ.S    ShowSongName
  13026.     CMP.W    #4,CurrScreen
  13027.     BEQ    Return2
  13028.     CMP.W    #5,CurrScreen
  13029.     BEQ.S    ShowSongName
  13030.     MOVE.L    SongDataPtr(PC),A0
  13031.     LEA    sd_numofpatt(A0),A0
  13032.     MOVE.L    A0,CurrCmds
  13033.     CLR.W    WordNumber
  13034.     MOVE.B    (A0),WordNumber+1
  13035.     MOVE.W    #1048,TextOffset
  13036.     BSR    Print4DecDigits
  13037.     MOVE.L    CurrCmds(PC),A0
  13038. ShowSongName
  13039.     MOVE.L    SongDataPtr(PC),A0
  13040.     MOVE.W    #4133,D1
  13041.     MOVEQ    #20,D0
  13042.     BRA    ShowText3
  13043.  
  13044.  
  13045. ShowSampleInfo    
  13046.     MOVEQ    #0,D0
  13047.     MOVE.W    InsNum(PC),D0
  13048.     MOVE.W    D0,PlayInsNum
  13049.     BNE.S    ssiskipit
  13050.     MOVE.W    LastInsNum(PC),D0
  13051. ssiskipit
  13052.     MOVE.W    D0,D1
  13053.     LSL.L    #2,D0
  13054.     LEA    SamplePtrs(PC),A0
  13055.     MOVE.L    (A0,D0.W),si_pointer
  13056.     MOVE.L    SongDataPtr(PC),A0
  13057.     LEA    -10(A0),A0
  13058.     MOVE.W    D1,D0
  13059.     MULU    #30,D0
  13060.     ADD.L    D0,A0
  13061.     MOVE.L    A0,CurrCmds
  13062.     MOVE.L    22(A0),SampleInfo
  13063.     MOVE.L    26(A0),si_long
  13064.     TST.B    NoSampleInfo
  13065.     BNE    ssiskip
  13066.  
  13067.     MOVE.L    A0,-(SP)
  13068.     MOVE.B    #' ',FineTuneSign
  13069.     MOVE.B    24(A0),D0
  13070.     BEQ.S    dopfitu
  13071.     MOVE.B    #'+',FineTuneSign
  13072.     BTST    #3,D0
  13073.     BEQ.S    dopfitu
  13074.     MOVE.B    #'-',FineTuneSign
  13075.     MOVEQ    #16,D1
  13076.     SUB.B    D0,D1
  13077.     MOVE.B    D1,D0
  13078. dopfitu    MOVE.W    #1491,TextOffset
  13079.     BSR    PrintHexDigit  ; FineTune
  13080.     LEA    FineTuneSign(PC),A0
  13081.     MOVE.W    #1490,D1
  13082.     MOVEQ    #1,D0
  13083.     BSR    ShowText3  ; FineTuneSign
  13084.     MOVE.L    (SP)+,A0
  13085.  
  13086.     CLR.W    WordNumber
  13087.     MOVE.B    25(A0),WordNumber+1
  13088.     MOVE.W    WordNumber,VolumeEfx
  13089.     OR.W    #$0C00,VolumeEfx
  13090.     MOVE.W    #2368,TextOffset
  13091.     BSR    PrintHexWord  ; Volume
  13092.  
  13093.     MOVEQ    #0,D0
  13094.     MOVE.W    SampleInfo(PC),D0
  13095.     LSL.L    #1,D0
  13096.     MOVE.W    D0,WordNumber
  13097.     MOVE.L    SamplePos,D2
  13098.     CMP.L    D0,D2
  13099.     BLS.S    ShowLen
  13100.     MOVE.L    D0,SamplePos
  13101.     BSR    ShowPos
  13102.     MOVEQ    #0,D0
  13103.     MOVE.W    SampleInfo(PC),D0
  13104.     LSL.L    #1,D0
  13105.     MOVE.W    D0,WordNumber
  13106. ShowLen    MOVE.W    #2808,TextOffset
  13107.     BSR    PrintHexWord  ; Length
  13108.  
  13109.     MOVE.W    si_long,D0
  13110.     ADD.W    D0,D0
  13111.     MOVE.W    D0,WordNumber
  13112.     MOVE.W    #3248,TextOffset
  13113.     BSR    PrintHexWord  ; Repeat
  13114.  
  13115.     MOVE.W    si_long+2,D0
  13116.     ADD.W    D0,D0
  13117.     MOVE.W    D0,WordNumber
  13118.     MOVE.W    #3688,TextOffset
  13119.     BSR    PrintHexWord  ; RepLen
  13120.  
  13121.     BSR.S    ssiinst
  13122.  
  13123. ssiskip    TST.B    NoSampleInfo
  13124.     BEQ.S    ssiskp2
  13125.     CMP.W    #5,CurrScreen
  13126.     BEQ.S    ssiskp2
  13127.     CMP.W    #3,CurrScreen
  13128.     BNE    Return2
  13129. ssiskp2    MOVE.L    CurrCmds(PC),A0
  13130.     MOVE.W    #4573,D1
  13131.     MOVEQ    #22,D0
  13132.     BRA    ShowText3  ; SampleName
  13133.  
  13134. ssiinst    TST.B    NoSampleInfo
  13135.     BNE    Return2
  13136.     MOVE.W    InsNum(PC),WordNumber
  13137.     MOVE.W    #1928,TextOffset
  13138.     BRA    PrintHexWord  ; SampleNumber
  13139.  
  13140. FineTuneSign    dc.b ' ',0
  13141. VolumeEfx    dc.w 0
  13142.  
  13143. ;---- Print Decimal Digits ----
  13144.  
  13145. Print2DecDigits
  13146.     MOVE.W    #2,TextLength
  13147.     MOVEQ    #0,D1
  13148.     MOVE.W    WordNumber(PC),D1
  13149.     LEA    NumberText(PC),A0
  13150.     BRA.S    pdig
  13151.  
  13152. Print3DecDigits
  13153.     MOVE.W    #3,TextLength
  13154.     MOVEQ    #0,D1
  13155.     MOVE.W    WordNumber(PC),D1
  13156.     LEA    NumberText(PC),A0
  13157.     BRA.S    pdig100
  13158.  
  13159. Print4DecDigits
  13160.     MOVE.W    #4,TextLength
  13161.     MOVEQ    #0,D1
  13162.     MOVE.W    WordNumber(PC),D1
  13163.     LEA    NumberText(PC),A0
  13164.     DIVU    #1000,D1
  13165.     BSR.S    DoOneDigit
  13166. pdig100    DIVU    #100,D1
  13167.     BSR.S    DoOneDigit
  13168. pdig    DIVU    #10,D1
  13169.     BSR.S    DoOneDigit
  13170.     BSR.S    DoOneDigit
  13171.     MOVE.L    #NumberText,A0
  13172.     BRA    ShowText2
  13173.  
  13174. DoOneDigit
  13175.     ADD.B    #'0',D1
  13176.     MOVE.B    D1,(A0)+
  13177.     CLR.W    D1
  13178.     SWAP    D1
  13179.     RTS
  13180.  
  13181. Print6DecDigits
  13182.     LEA    NumberText,A0
  13183.     MOVE.L    D0,D1
  13184.     CMP.L    #1000000,D1
  13185.     BHS    toobig
  13186.  
  13187.     SWAP    D1
  13188.     CLR.W    D1
  13189.     SWAP    D1
  13190.     DIVU    #10,D1
  13191.     SWAP    D1
  13192.     ADD.B    #'0',D1
  13193.     MOVE.B    D1,5(A0)
  13194.     CMP.L    #10,D0
  13195.     BLO.S    p6zero1
  13196.  
  13197.     DIVU    #100,D0
  13198.     MOVE.L    D0,D1
  13199.     CLR.W    D0
  13200.     SWAP    D0
  13201.     DIVU    #10,D0
  13202.     ADD.B    #'0',D0
  13203.     MOVE.B    D0,4(A0)
  13204.     AND.L    #$FFFF,D1
  13205.     BEQ.S    p6zero2
  13206.     DIVU    #10,D1
  13207.     SWAP    D1
  13208.     ADD.B    #'0',D1
  13209.     MOVE.B    D1,3(A0)
  13210.     CLR.W    D1
  13211.     SWAP    D1
  13212.     TST.W    D1
  13213.     BEQ.S    p6zero3
  13214.     DIVU    #10,D1
  13215.     SWAP    D1
  13216.     ADD.B    #'0',D1
  13217.     MOVE.B    D1,2(A0)
  13218.     CLR.W    D1
  13219.     SWAP    D1
  13220.     TST.W    D1
  13221.     BEQ.S    p6zero4
  13222.     DIVU    #10,D1
  13223.     SWAP    D1
  13224.     ADD.B    #'0',D1
  13225.     MOVE.B    D1,1(A0)
  13226.     CLR.W    D1
  13227.     SWAP    D1
  13228.     TST.W    D1
  13229.     BEQ.S    p6zero5
  13230.     DIVU    #10,D1
  13231.     SWAP    D1
  13232.     ADD.B    #'0',D1
  13233.     MOVE.B    D1,(A0)
  13234.     BRA.S    p6end
  13235.  
  13236. p6zero1    MOVE.B    #' ',4(A0)
  13237. p6zero2    MOVE.B    #' ',3(A0)
  13238. p6zero3    MOVE.B    #' ',2(A0)
  13239. p6zero4    MOVE.B    #' ',1(A0)
  13240. p6zero5    MOVE.B    #' ',0(A0)
  13241. p6end    MOVE.W    #6,TextLength
  13242.     BRA    ShowText2
  13243.  
  13244. toobig    MOVE.B    #' ',D0
  13245.     BSR.S    toobig2
  13246.     DIVU    #1000,D0
  13247.     MOVE.W    D0,WordNumber
  13248.     BSR    Print4DecDigits
  13249.     MOVE.B    #'K',D0
  13250. toobig2    LEA    NumberText(PC),A0
  13251.     MOVE.B    D0,(A0)
  13252.     MOVE.W    #1,TextLength
  13253.     BRA    ShowText2
  13254.  
  13255. NumberText    dcb.b    6,0
  13256.  
  13257. ;---- Print Hex Digits ----
  13258.  
  13259. PrintHiInstrNum
  13260.     MOVEQ    #0,D0
  13261.     TST.W    CurrentPlayNote
  13262.     BEQ.S    phin2
  13263.     MOVE.W    InsNum(PC),D0
  13264.     LSR.W    #4,D0
  13265.     BNE.S    PrintHexDigit
  13266. phin2    TST.B    BlankZeroFlag
  13267.     BEQ.S    PrintHexDigit
  13268.     LEA    BlankInsText(PC),A0
  13269.     BRA.S    phd2
  13270. PrintHexDigit
  13271.     AND.L    #$0F,D0
  13272.     ADD.L    D0,D0
  13273.     LEA    FastHexTable+1(PC),A0
  13274.     ADD.L    D0,A0
  13275. phd2    MOVE.W    #1,TextLength
  13276.     BRA.S    ShowText2
  13277.  
  13278. BlankInsText    dc.b " ",0
  13279.  
  13280. PrintHexWord
  13281.     LEA    WordNumber(PC),A0
  13282.     MOVEQ    #0,D0
  13283.     MOVE.B    (A0),D0
  13284.     LSL.L    #1,D0
  13285.     LEA    FastHexTable(PC),A0
  13286.     ADD.L    D0,A0
  13287.     MOVE.W    #2,TextLength
  13288.     BSR.S    ShowText2
  13289. PrintHexByte
  13290.     LEA    WordNumber(PC),A0
  13291.     MOVEQ    #0,D0
  13292.     MOVE.B    1(A0),D0
  13293.     LSL.L    #1,D0
  13294.     MOVE.L    #FastHexTable,A0
  13295.     ADD.L    D0,A0
  13296.     MOVE.W    #2,TextLength
  13297.     BSR.S    ShowText2
  13298.     CLR.W    WordNumber
  13299.     RTS    
  13300.  
  13301. ;---- Text Output Routines ----
  13302.  
  13303. ShowText3
  13304.     MOVE.W    D0,TextLength
  13305.     MOVE.W    D1,TextOffset
  13306. ShowText2
  13307.     MOVE.L    A0,ShowTextPtr
  13308. ShowText
  13309.     MOVEM.L    A2-A4,-(SP)
  13310.     LEA    TextTable(PC),A3
  13311.     LEA    FontData,A4
  13312.     MOVE.W    TextLength(PC),D0
  13313.     MOVE.L    TextBplPtr(PC),A1
  13314.     MOVE.W    TextOffset(PC),D1
  13315.     LEA    (A1,D1.W),A1
  13316.     ADD.W    D0,TextOffset
  13317.     MOVE.L    ShowTextPtr(PC),A0
  13318.     BRA.S    dstlope
  13319. dstloop    MOVEQ    #0,D1
  13320.     MOVE.B    (A0)+,D1
  13321.     BNE.S    dstskip
  13322.     MOVE.B    ShowZeroFlag(PC),D1
  13323. dstskip    MOVE.B    (A3,D1.W),D1
  13324.     LSL.W    #3,D1
  13325.     MOVE.L    A4,A2
  13326.     ADD.L    D1,A2
  13327.     MOVE.B    (A2)+,(A1)+
  13328.     MOVE.B    (A2)+,40-1(A1)
  13329.     MOVE.B    (A2)+,80-1(A1)
  13330.     MOVE.B    (A2)+,120-1(A1)
  13331.     MOVE.B    (A2),160-1(A1)
  13332. dstlope    DBRA    D0,dstloop
  13333.     MOVEM.L    (SP)+,A2-A4
  13334.     RTS    
  13335.  
  13336. SpaceShowText
  13337.     MOVE.W    ShowZeroFlag(PC),-(SP)
  13338.     MOVE.B    #' ',ShowZeroFlag
  13339.     BSR.S    ShowText
  13340.     MOVE.W    (SP)+,ShowZeroFlag
  13341.     RTS    
  13342.  
  13343. ShowZeroFlag    dc.b    95,0
  13344.  
  13345. TextTable
  13346.     dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 0
  13347.     dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  13348.     dc.b 00,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15 ; 32
  13349.     dc.b 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
  13350.     dc.b 32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47 ; 64
  13351.     dc.b 48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63
  13352.     dc.b 69,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47 ; 96
  13353.     dc.b 48,49,50,51,52,53,54,55,56,57,58,65,66,67,68,63
  13354.     dc.b 69,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 128
  13355.     dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  13356.     dc.b 0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 160
  13357.     dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  13358.     dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 192
  13359.     dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  13360.     dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 224
  13361.     dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  13362.  
  13363.  
  13364. ;---- Set Sprite Position ----
  13365.  
  13366. SetSpritePos
  13367.     ADD.W    #$002C,D1
  13368.     ADD.W    D1,D2
  13369.     ROL.W    #7,D2
  13370.     ASL.W    #1,D2
  13371.     BCC.S    sppskip
  13372.     OR.W    #2,D2
  13373. sppskip    ROL.W    #7,D1
  13374.     ASL.W    #1,D1
  13375.     BCC.S    sppskip2
  13376.     OR.W    #4,D2
  13377. sppskip2
  13378.     ADD.W    #$007D,D0
  13379.     ASR.W    #1,D0
  13380.     BCC.S    sppskip3
  13381.     OR.W    #1,D2
  13382. sppskip3
  13383.     OR.W    D0,D1
  13384.     MOVE.W    D1,(A0)
  13385.     MOVE.W    D2,2(A0)
  13386.     RTS    
  13387.  
  13388.  
  13389. ;---- DoLoad / DoSave Data ----
  13390.  
  13391. DoLoadData
  13392.     TST.L    DiskDataLength
  13393.     BEQ.S    dlsend
  13394.     TST.L    DiskDataPtr
  13395.     BEQ.S    dlsend
  13396.     JSR    SetDiskPtrCol
  13397.     LEA    LoadingText(PC),A0
  13398.     BSR    ShowStatusText
  13399.     MOVE.L    DOSbase(PC),A6
  13400.     MOVE.L    FileNamePtr(PC),D1
  13401.     MOVE.L    #1005,D2
  13402.     JSR    LVOOpen(A6)
  13403.     MOVE.L    D0,FileHandle
  13404.     BEQ.S    CantOpenFile
  13405.     MOVE.L    FileHandle(PC),D1
  13406.     MOVE.L    DiskDataPtr(PC),D2
  13407.     MOVE.L    DiskDataLength(PC),D3
  13408.     JSR    LVORead(A6)
  13409.     MOVE.L    FileHandle(PC),D1
  13410.     JSR    LVOClose(A6)
  13411. dlsend    CLR.L    FileHandle
  13412.     JSR    SetNormalPtrCol
  13413.      MOVEQ    #-1,D0
  13414.     RTS
  13415.  
  13416. CantOpenFile
  13417.     LEA    CantOpenFileText(PC),A0
  13418. caopfil    BSR    ShowStatusText
  13419.     JSR    SetErrorPtrCol
  13420.      MOVEQ    #0,D0
  13421.     RTS
  13422.  
  13423. CantSaveFile
  13424.     LEA    CantSaveFileText(PC),A0
  13425.     BRA.S    caopfil
  13426. CantExamFile
  13427.     LEA    CantExamFileText(PC),A0
  13428.     BRA.S    caopfil
  13429. CantFindFile
  13430.     LEA    CantFindFileText(PC),A0
  13431.     BRA.S    caopfil
  13432. FileIsEmpty
  13433.     LEA    FileIsEmptyText(PC),A0
  13434.     BRA.S    caopfil
  13435.  
  13436. CantOpenFileText    dc.b "can't open file !",0
  13437. CantSaveFileText    dc.b "can't save file !",0
  13438. CantExamFileText    dc.b "examine error !",0
  13439. CantFindFileText    dc.b "can't find file !",0
  13440. FileIsEmptyText        dc.b "file is empty !",0
  13441.  
  13442. DoSaveData
  13443.     JSR    SetDiskPtrCol
  13444.     LEA    SavingText(PC),A0
  13445.     BSR    ShowStatusText
  13446.     MOVE.L    DOSbase(PC),A6
  13447.     MOVE.L    FileNamePtr(PC),D1
  13448.     MOVE.L    #1006,D2
  13449.     JSR    LVOOpen(A6)
  13450.     MOVE.L    D0,FileHandle
  13451.     BEQ    CantOpenFile
  13452.     MOVE.L    FileHandle(PC),D1
  13453.     MOVE.L    DiskDataPtr(PC),D2
  13454.     MOVE.L    DiskDataLength(PC),D3
  13455.     JSR    LVOWrite(A6)
  13456.     MOVE.L    FileHandle(PC),D1
  13457.     JSR    LVOClose(A6)
  13458.     CLR.L    FileHandle
  13459.     JMP    SetNormalPtrCol
  13460.  
  13461. ;---- PLST ----
  13462.  
  13463. PLST    CLR.B    RawKeyCode
  13464.     CMP.W    #6,CurrScreen
  13465.     BEQ    ExitPLST
  13466.     CMP.W    #1,CurrScreen
  13467.     BNE    Return2
  13468.     JSR    WaitForButtonUp
  13469.     MOVE.W    #6,CurrScreen
  13470.     JSR    ClearRightArea
  13471.     JSR    ClearAnalyzerColors
  13472.     BSR.S    DrawPLSTScreen
  13473.     BEQ    ExitPLST
  13474.     BSR    RedrawPLST
  13475. PLST_rts
  13476.     RTS
  13477.  
  13478. DrawPLSTScreen
  13479.     LEA    PLSTData,A0
  13480.     MOVE.L    #PLSTSize,D0
  13481.     BSR    Decompact
  13482.     BEQ    Return2
  13483.     LEA    TopMenusPos,A0
  13484.     MOVEQ    #98,D0
  13485. dplstloop1
  13486.     MOVEQ    #24,D1
  13487. dplstloop2
  13488.     MOVE.B    2574(A1),10240(A0)
  13489.     MOVE.B    (A1)+,(A0)+
  13490.     DBRA    D1,dplstloop2
  13491.     LEA    15(A0),A0
  13492.     ADDQ.L    #1,A1
  13493.     DBRA    D0,dplstloop1
  13494.     BSR    FreeDecompMem
  13495.     MOVEQ    #-1,D0
  13496.     RTS
  13497.  
  13498. ShowDiskNames
  13499.     MOVE.W    #616,TextOffset
  13500.     MOVE.W    #5,TextLength
  13501.     MOVE.L    #STText1,A0
  13502.     BSR    ShowText2
  13503.     ADDQ.W    #1,TextOffset
  13504.     MOVE.L    #STText2,A0
  13505.     BSR    ShowText2
  13506.     ADDQ.W    #1,TextOffset
  13507.     MOVE.L    #STText3,A0
  13508.     BRA    ShowText2
  13509.  
  13510. PLSTCheckNum
  13511.     TST.L    PLSTmem
  13512.     BEQ    NoPLST
  13513.     TST.L    MaxPLSTOffset
  13514.     BEQ    NoPLST
  13515.     MOVE.L    PLSTmem(PC),A0
  13516.     MOVE.W    PresetTotal(PC),D7
  13517.     SUBQ.W    #1,D7
  13518.     TST.B    STText1Number
  13519.     BNE    plstsskip
  13520.     TST.B    STText2Number
  13521.     BNE    plstsskip
  13522.     TST.B    STText3Number
  13523.     BEQ    PLSTMarkAll
  13524. plstsskip
  13525.     MOVE.L    STText1Number-1(PC),A3
  13526.     MOVE.L    STText2Number-1(PC),A4
  13527.     MOVE.L    STText3Number-1(PC),A5
  13528.     MOVEQ    #0,D6
  13529. PLSTmarkloop
  13530.     MOVE.W    #'st',(A0)    ; Set lowercase 'st'
  13531.     MOVE.B    3(A0),D0
  13532.     CMP.B    #'a',D0
  13533.     BLO.S    pmlskp1
  13534.     SUB.B    #32,D0
  13535. pmlskp1    MOVE.B    D0,3(A0)
  13536.     MOVE.B    4(A0),D0
  13537.     CMP.B    #'a',D0
  13538.     BLO.S    pmlskp2
  13539.     SUB.B    #32,D0
  13540. pmlskp2    MOVE.B    D0,4(A0)
  13541.     MOVE.L    2(A0),D0    ; Get number ('-01:' etc)
  13542. PLSTchk1
  13543.     CMP.L    A3,D0
  13544.     BNE    PLSTchk2
  13545.     MOVE.W    #'ST',(A0)
  13546.     ADDQ.W    #1,D6
  13547.     BRA    PLSTmarknext
  13548.  
  13549. PLSTchk2
  13550.     CMP.L    A4,D0
  13551.     BNE    PLSTchk3
  13552.     MOVE.W    #'ST',(A0)
  13553.     ADDQ.W    #1,D6
  13554.     BRA    PLSTmarknext
  13555.  
  13556. PLSTchk3
  13557.     CMP.L    A5,D0
  13558.     BNE    PLSTmarknext
  13559.     MOVE.W    #'ST',(A0)
  13560.     ADDQ.W    #1,D6
  13561. PLSTmarknext
  13562.     ADD.L    #30,A0
  13563.     DBRA    D7,PLSTmarkloop
  13564.     MOVE.W    D6,PresetMarkTotal
  13565.     CLR.W    PLSTpos
  13566.     CLR.L    PLSTOffset
  13567.     RTS
  13568.  
  13569. PLSTMarkAll
  13570.     MOVE.W    #'ST',(A0)    ; Set uppercase 'ST'
  13571.     LEA    30(A0),A0
  13572.     DBRA    D7,PLSTMarkAll
  13573.     MOVE.W    PresetTotal(PC),PresetMarkTotal
  13574.     CLR.W    PLSTpos
  13575.     CLR.L    PLSTOffset
  13576.     RTS
  13577.  
  13578. NoPLST    CLR.W    PresetMarkTotal
  13579.     CLR.W    PLSTpos
  13580.     CLR.L    PLSTOffset
  13581.     RTS
  13582.  
  13583. RedrawPLST
  13584.     MOVE.W    PresetMarkTotal(PC),WordNumber
  13585.     MOVE.W    #189,TextOffset
  13586.     BSR    Print4DecDigits
  13587.     BSR    ShowDiskNames
  13588.     TST.L    PLSTmem
  13589.     BEQ    PLST_rts
  13590.     TST.L    MaxPLSTOffset
  13591.     BEQ    PLST_rts
  13592.  
  13593.     MOVE.L    PLSTOffset(PC),D6
  13594.     MOVE.L    PLSTmem(PC),A6
  13595.     MOVE.W    #976,A5 ; TextOffset
  13596.     LEA    PLSTOffset(PC),A4
  13597.     MOVEQ    #11,D7    ; Number of lines to print
  13598.     TST.L    D6
  13599.     BMI    EndOfPLST
  13600. dtplstloop
  13601.     CMP.W    #'ST',(A6,D6.L)    ; Check for 'ST'
  13602.     BNE    PLSTNext
  13603.     MOVE.L    D6,(A4)+
  13604.     MOVE.W    A5,TextOffset
  13605.     MOVE.W    #19,TextLength
  13606.     LEA    (A6,D6.L),A3
  13607.     ADDQ.L    #3,A3
  13608.     MOVE.L    A3,ShowTextPtr
  13609.     MOVEM.L    D0-D7/A0-A6,-(SP)
  13610.     BSR    SpaceShowText
  13611.     MOVEM.L    (SP)+,D0-D7/A0-A6
  13612.     MOVE.W    22(A6,D6.L),WordNumber
  13613.     MOVE.W    WordNumber,D0
  13614.     LSL.W    #1,D0
  13615.     MOVE.W    D0,WordNumber
  13616.     MOVEM.L    D0-D7/A0-A6,-(SP)
  13617.     BSR    PrintHexWord
  13618.     MOVEM.L    (SP)+,D0-D7/A0-A6
  13619.     ADD.L    #30,D6
  13620.     CMP.L    MaxPLSTOffset(PC),D6
  13621.     BHI    EndOfPLST
  13622.     ADD.W    #240,A5    ; Next Screen position
  13623.     DBRA    D7,dtplstloop
  13624.     RTS
  13625.  
  13626. PLSTNext
  13627.     ADD.L    #30,D6
  13628.     CMP.L    MaxPLSTOffset(PC),D6
  13629.     BHI    EndOfPLST
  13630.     BRA    dtplstloop
  13631.  
  13632. EndOfPLST
  13633.     MOVE.L    #$FFFFFFFF,(A4)+
  13634.     MOVE.W    A5,TextOffset
  13635.     MOVE.W    #23,TextLength
  13636.     MOVE.L    #EmptyLineText,ShowTextPtr
  13637.     MOVEM.L    D0-D7/A0-A6,-(SP)
  13638.     BSR    SpaceShowText
  13639.     MOVEM.L    (SP)+,D0-D7/A0-A6
  13640.     ADD.W    #240,A5
  13641.     DBRA    D7,EndOfPLST
  13642.     RTS
  13643.  
  13644. TypeInDisk1
  13645.     LEA    STText1Number(PC),A6
  13646.     MOVE.W    #156,LineCurX
  13647.     BRA    DoTypeInDisk
  13648.  
  13649. TypeInDisk2
  13650.     LEA    STText2Number(PC),A6
  13651.     MOVE.W    #204,LineCurX
  13652.     BRA    DoTypeInDisk
  13653.  
  13654. TypeInDisk3
  13655.     LEA    STText3Number(PC),A6
  13656.     MOVE.W    #252,LineCurX
  13657. DoTypeInDisk
  13658.     CLR.B    (A6)
  13659.     CLR.B    1(A6)
  13660.     JSR    StorePtrCol
  13661.     JSR    SetWaitPtrCol
  13662.     BSR    ShowDiskNames
  13663.     MOVE.W    #20,LineCurY
  13664.     BSR    UpdateLineCurPos
  13665.     BSR    GetHexKey
  13666.     TST.B    RawKeyCode
  13667.     BNE    ClearDiskNum
  13668.     BTST    #2,$DFF016
  13669.     BEQ    ClearDiskNum
  13670.     ADD.W    D1,D1
  13671.     LEA    FastHexTable+1(PC),A0
  13672.     MOVE.B    (A0,D1.W),(A6)
  13673.     ADDQ.W    #8,LineCurX
  13674.     BSR    ShowDiskNames
  13675.     BSR    UpdateLineCurPos
  13676.     BSR    GetHexKey
  13677.     TST.B    RawKeyCode
  13678.     BNE    ClearDiskNum
  13679.     BTST    #2,$DFF016
  13680.     BEQ    ClearDiskNum
  13681.     ADD.W    D1,D1
  13682.     LEA    FastHexTable+1(PC),A0
  13683.     MOVE.B    (A0,D1.W),1(A6)
  13684.     JSR    RestorePtrCol
  13685.     BSR    PLSTCheckNum
  13686.     BSR    RedrawPLST
  13687.     CLR.W    LineCurX
  13688.     MOVE.W    #270,LineCurY
  13689.     BRA    UpdateLineCurPos
  13690.  
  13691. ClearAllDisks
  13692.     BSR    DoClearDisks
  13693.     BSR    PLSTCheckNum
  13694.     BRA    RedrawPLST
  13695.  
  13696. DoClearDisks
  13697.     MOVEQ    #0,D0
  13698.     MOVE.B    D0,STText1Number
  13699.     MOVE.B    D0,STText1Number+1
  13700.     MOVE.B    D0,STText2Number
  13701.     MOVE.B    D0,STText2Number+1
  13702.     MOVE.B    D0,STText3Number
  13703.     MOVE.B    D0,STText3Number+1
  13704.     RTS
  13705.  
  13706. MountList
  13707.     JSR    StorePtrCol
  13708.     JSR    SetDiskPtrCol
  13709.     BSR    DoClearDisks
  13710.     MOVE.W    #1,MountFlag
  13711.     LEA    df0text(PC),A4
  13712.     BSR    DoMountList
  13713.     LEA    STText1(PC),A0
  13714.     BSR    CheckMountName
  13715.     LEA    df1text(PC),A4
  13716.     BSR    DoMountList
  13717.     LEA    STText2(PC),A0
  13718.     BSR    CheckMountName
  13719.     LEA    df2text(PC),A4
  13720.     BSR    DoMountList
  13721.     LEA    STText3(PC),A0
  13722.     BSR    CheckMountName
  13723.     CLR.W    MountFlag
  13724.     JSR    RestorePtrCol
  13725.     BRA    cdisknum2
  13726.  
  13727. DoMountList    
  13728.     CLR.L    FIB_Filename
  13729.     CLR.L    FIB_Filename+4
  13730.     CLR.L    FIB_Filename+8
  13731.     MOVE.L    DOSBase(PC),A6
  13732.     MOVE.L    A4,D1
  13733.     MOVEQ    #-2,D2
  13734.     JSR    LVOLock(A6)
  13735.     MOVE.L    D0,FileLock
  13736.     BEQ    MountError
  13737.     MOVE.L    FileLock(PC),D1
  13738.     MOVE.L    #FileInfoBlock,D2
  13739.     JSR    LVOExamine(A6)
  13740.     TST.L    D0
  13741.     BEQ    MountError
  13742.     MOVE.L    FileLock(PC),D1
  13743.     JSR    LVOUnLock(A6)
  13744. MountError
  13745.     MOVEQ    #-1,D0
  13746.     RTS
  13747.  
  13748. CheckMountName
  13749.     MOVE.W    FIB_Filename,D0
  13750.     BEQ    MountError
  13751.     MOVE.W    #'ST',D1    ; Check for ST
  13752.     AND.W    #$1F1F,D0
  13753.     AND.W    #$1F1F,D1
  13754.     CMP.W    D0,D1
  13755.     BNE    ClearDiskNum
  13756.     MOVE.B    FIB_Filename+3,D0
  13757.     LSL.W    #8,D0
  13758.     MOVE.B    FIB_Filename+4,D0
  13759.     CMP.W    #'00',D0
  13760.     BEQ    ClearDiskNum
  13761.     MOVE.B    D0,4(A0)    ; Put disk number into ST-xx
  13762.     LSR.W    #8,D0
  13763.     MOVE.B    D0,3(A0)
  13764.     MOVEQ    #0,D0
  13765.     RTS
  13766.  
  13767. ClearDiskNum
  13768.     CLR.B    RawKeyCode
  13769.     JSR    RestorePtrCol
  13770.     CLR.B    (A6)
  13771.     CLR.B    1(A6)
  13772.     CLR.W    LineCurX
  13773.     MOVE.W    #270,LineCurY
  13774.     BSR    UpdateLineCurPos
  13775. cdisknum2
  13776.     BSR    PLSTCheckNum
  13777.     BRA    RedrawPLST
  13778.  
  13779. df0text    dc.b 'DF0:',0,0
  13780. df1text    dc.b 'DF1:',0,0
  13781. df2text    dc.b 'DF2:',0,0
  13782.  
  13783. CheckPLSTGadgs
  13784.     MOVEM.W    MouseX2(PC),D0/D1
  13785.     CMP.W    #120,D0
  13786.     BLO    cplstend
  13787.     CMP.W    #23,D1
  13788.     BHS    PLSTPressed
  13789.     CMP.W    #12,D1
  13790.     BHS    PLSTLine2
  13791. PLSTLine1
  13792.     CMP.W    #268,D0
  13793.     BHS    ExitPLST
  13794.     CMP.W    #168,D0
  13795.     BHS    cplstend
  13796.     CMP.W    #120,D0
  13797.     BHS    ClearAllDisks
  13798.     RTS
  13799.  
  13800. PLSTLine2
  13801.     CMP.W    #268,D0
  13802.     BHS    MountList
  13803.     CMP.W    #218,D0
  13804.     BHS    TypeInDisk3
  13805.     CMP.W    #168,D0
  13806.     BHS    TypeInDisk2
  13807.     BRA    TypeInDisk1
  13808. cplstend
  13809.     RTS
  13810.  
  13811. ExitPLST
  13812.     JSR    WaitForButtonUp
  13813.     CLR.B    RawKeyCode
  13814.     JSR    ClearRightArea
  13815.     JMP    DisplayMainScreen
  13816.  
  13817. PLSTOneUp
  13818.     TST.W    PresetMarkTotal
  13819.     BEQ    Return2
  13820.     BTST    #6,$BFE001
  13821.     BEQ    PLST_rts
  13822.     MOVE.W    PLSTpos,D0
  13823.     MOVE.W    D0,D2
  13824.     SUBQ.W    #1,D0
  13825.     TST.W    ShiftKeyStatus
  13826.     BNE.S    pouski2
  13827.     BTST    #2,$DFF016
  13828.     BNE    pouskip
  13829. pouski2    SUB.W    #9,D0
  13830. pouskip    TST.W    D0
  13831.     BPL    DoPLSTUpDown
  13832.     CLR.W    D0
  13833.     BRA    DoPLSTUpDown
  13834.  
  13835. PLSTOneDown
  13836.     TST.W    PresetMarkTotal
  13837.     BEQ    Return2
  13838.     BTST    #6,$BFE001
  13839.     BEQ    PLST_rts
  13840.     MOVE.W    PLSTpos(PC),D0
  13841.     MOVE.W    D0,D2
  13842.     ADDQ.W    #1,D0
  13843.     TST.W    ShiftKeyStatus
  13844.     BNE.S    podski2
  13845.     BTST    #2,$DFF016
  13846.     BNE    podskip
  13847. podski2    ADD.W    #9,D0
  13848. podskip    MOVE.W    PresetMarkTotal(PC),D1
  13849.     SUB.W    #12,D1
  13850.     CMP.W    D0,D1
  13851.     BHS    DoPLSTUpDown
  13852.     MOVE.W    D1,D0
  13853. DoPLSTUpDown
  13854.     BSR    UpdateOffset
  13855.     BRA    RedrawPLST
  13856.  
  13857. UpdateOffset
  13858.     MOVE.W    PLSTpos(PC),D1
  13859.     MOVE.W    D0,PLSTpos
  13860.     CMP.W    D0,D1
  13861.     BEQ    Return2
  13862.     TST.W    D0
  13863.     BEQ    ZeroPLSTOffset
  13864.     SUBQ.W    #1,D0
  13865.     MOVE.L    PLSTmem(PC),A0
  13866.     MOVEQ    #0,D6
  13867. cpoloop    CMP.W    #'ST',(A0,D6.L)    ; Check for 'ST'
  13868.     BEQ    NextPLSTOffset
  13869.     ADD.L    #30,D6
  13870.     BRA    cpoloop
  13871. NextPLSTOffset
  13872.     ADD.L    #30,D6
  13873.     DBRA    D0,cpoloop
  13874.     MOVE.L    D6,PLSTOffset
  13875.     RTS
  13876.  
  13877. ZeroPLSTOffset
  13878.     CLR.L    PLSTOffset
  13879.     RTS
  13880.  
  13881. PLSTPressed
  13882.     CMP.W    #24,D1
  13883.     BLO    Return2
  13884.     CMP.W    #95,D1
  13885.     BHI    Return2
  13886.     SUB.W    #24,D1
  13887.     AND.L    #$0000FFFF,D1
  13888.     DIVU    #6,D1
  13889.     LSL.W    #2,D1
  13890.     LEA    PLSTOffset(PC),A0
  13891.     MOVE.L    (A0,D1.W),D1
  13892.     BMI    Return2
  13893.     DIVU    #30,D1
  13894.     ADDQ.W    #1,D1
  13895.     MOVE.W    D1,CurrentPreset
  13896.     JSR    WaitForButtonUp
  13897.     BRA    UsePreset
  13898.  
  13899. ;---- Preset Editor/PED ----
  13900.  
  13901. PresetEditor
  13902.     JSR    WaitForButtonUp
  13903.     MOVE.W    #4,CurrScreen
  13904.     ST     DisableAnalyzer
  13905.     ST    NoSampleInfo
  13906.     BSR    SwapPresEdScreen
  13907.     BEQ    pedexi2
  13908. PED_Refresh
  13909.     CLR.W    PED_Action
  13910.     MOVE.L    TextBplPtr(PC),A0
  13911.     MOVE.W    #1219,D0
  13912. pedloop    CLR.L    (A0)+
  13913.     DBRA    D0,pedloop
  13914.     JSR    SetNormalPtrCol
  13915.     JSR    ClearAnalyzerColors
  13916.     BSR    ShowPEDnumbers
  13917.     BRA    ShowPresetNames
  13918.  
  13919. SwapPresEdScreen
  13920.     MOVE.L    DecompMemPtr,D0
  13921.     BEQ    speds2
  13922.     MOVE.L    D0,A1
  13923.     BSR    speds3
  13924.     BRA    FreeDecompMem
  13925. speds2    LEA    PresetEdData,A0
  13926.     MOVE.L    #PresetEdSize,D0
  13927.     BSR    Decompact
  13928.     BEQ    Return2
  13929. speds3    LEA    BitplaneData,A0
  13930.     MOVEQ    #1,D2
  13931. spesloop1
  13932.     MOVE.W    #1219,D0
  13933. spesloop2
  13934.     MOVE.L    (A0),D1
  13935.     MOVE.L    (A1),(A0)+
  13936.     MOVE.L    D1,(A1)+
  13937.     DBRA    D0,spesloop2
  13938.     LEA    $14F0(A0),A0
  13939.     DBRA    D2,spesloop1
  13940.     MOVEQ    #-1,D0
  13941.     RTS
  13942.  
  13943. CheckPresEdGadgs
  13944.     MOVEM.W    MouseX2(PC),D0/D1
  13945.     CMP.W    #45,D1
  13946.     BHS    CheckPEDnames
  13947.     CLR.W    PED_Action
  13948.     JSR    SetNormalPtrCol
  13949.     CMP.W    #307,D0
  13950.     BHS    PED_GotoPLST
  13951. PED_Menu1
  13952.     CMP.W    #101,D0
  13953.     BHS    PED_Menu2
  13954.     CMP.W    #34,D1
  13955.     BHS    PED_DeleteDisk
  13956.     CMP.W    #23,D1
  13957.     BHS    PED_Delete
  13958.     CMP.W    #12,D1
  13959.     BHS    PED_Insert
  13960.     BRA    PED_AddPathGadg
  13961.  
  13962. PED_Menu2    
  13963.     CMP.W    #209,D0
  13964.     BHS    PED_Menu3
  13965.     CMP.W    #34,D1
  13966.     BHS    PED_ClearPLST
  13967.      CMP.W    #23,D1
  13968.     BHS    Return2
  13969.      CMP.W    #12,D1
  13970.     BHS    PED_Disk
  13971.     BRA    PED_EnterPath
  13972.  
  13973. PED_Menu3    
  13974.     CMP.W    #34,D1
  13975.     BHS    PED_Print
  13976.     CMP.W    #23,D1
  13977.     BHS    WritePLST
  13978.     CMP.W    #12,D1
  13979.     BHS.S    xLoadPLST
  13980.     BRA    PED_EnterPath
  13981.  
  13982. xLoadPLST
  13983.     BSR    LoadPLST
  13984.     MOVE.W    #1,PEDPos
  13985.     BRA    PED_Refresh
  13986.  
  13987. PED_GotoPLST
  13988.     BSR    PED_Exit
  13989.     BRA    PLST
  13990.  
  13991. PED_Exit
  13992.     JSR    WaitForButtonUp
  13993.     BSR    PLSTCheckNum
  13994.     BSR    SwapPresEdScreen
  13995.     MOVE.L    TextBplPtr(PC),A0
  13996.     MOVE.W    #1219,D0
  13997. pedeloop    CLR.L    (A0)+
  13998.     DBRA    D0,pedeloop
  13999.     CLR.B    RawKeyCode
  14000. pedexi2    JSR    ClearAnalyzerColors
  14001.     JMP    DisplayMainAll
  14002.  
  14003. PED_AddPathGadg
  14004.     TST.L    PLSTmem
  14005.     BNE    pedawok
  14006.     BSR    AllocPLST
  14007.     TST.L    PLSTmem
  14008.     BEQ    PLSTMemErr
  14009. pedawok    MOVE.L    DOSbase(PC),A6
  14010.     MOVE.L    #PEdDefaultPath,D1
  14011.     MOVEQ    #-2,D2
  14012.     JSR    LVOLock(A6)
  14013.     MOVE.L    D0,FileLock
  14014.     BEQ    UnlockReadPath
  14015.     JSR    SetDiskPtrCol
  14016.     LEA    AddingPathText(PC),A0
  14017.     BSR    ShowStatusText
  14018.     MOVE.L    DOSbase(PC),A6
  14019.     MOVE.L    FileLock(PC),D1
  14020.     MOVE.L    #FileInfoBlock,D2
  14021.     JSR    LVOExamine(A6)
  14022.     TST.L    D0
  14023.     BPL    UnlockReadPath
  14024.     TST.L    FIB_EntryType
  14025.     BPL    CheckPathDirName
  14026.     BSR    AddPreset
  14027.     BRA    IsPLSTfull
  14028.  
  14029. CheckPathDirName
  14030.     CMP.B    #'-',FIB_FileName+2
  14031.     BNE    IsPLSTfull
  14032.     MOVE.B    FIB_FileName+3,SndDiskNum0
  14033.     MOVE.B    FIB_FileName+4,SndDiskNum1
  14034.     BSR    ShowPEDnumbers
  14035. IsPLSTfull
  14036.     MOVE.W    PresetTotal(PC),D0
  14037.     CMP.W    MaxPLSTEntries,D0
  14038.     BLO    ReadPathNext
  14039.     BSR    PLSTisFull
  14040.     BRA    ReadPathEnd
  14041.  
  14042. ReadPathNext
  14043.     MOVE.L    DOSbase,A6
  14044.     MOVE.L    FileLock(PC),D1
  14045.     MOVE.L    #FileInfoBlock,D2
  14046.     JSR    LVOExNext(A6)
  14047.     TST.L    D0
  14048.     BPL    ReadPathEnd
  14049.     BTST    #2,$DFF016
  14050.     BEQ    ReadPathEnd
  14051.     TST.L    FIB_EntryType
  14052.     BPL    IsPLSTfull
  14053.     CMP.L    #'.inf',FIB_FileName
  14054.     BEQ    IsPLSTfull
  14055.     CMP.L    #'.inf',FIB_FileName+4
  14056.     BEQ    IsPLSTfull
  14057.     LEA    FIB_FileName,A0
  14058.     MOVEQ    #28,D0
  14059. repalop    CMP.B    #'.',(A0)+
  14060.     BEQ    CouldBeInfo
  14061.     DBRA    D0,repalop
  14062. rpnskip    CLR.W    PresetRepeat
  14063.     MOVE.W    #1,PresetReplen
  14064.     TST.B    IFFLoopFlag    ; name is ok, test for IFF
  14065.     BEQ    rpnskp2
  14066.     LEA    PEDDefaultPath,A0
  14067.     JSR    CopyPath
  14068.     LEA    FIB_FileName,A0
  14069. rpncpfn    MOVE.B    (A0)+,(A1)+
  14070.     BNE.S    rpncpfn
  14071.     MOVE.L    #FileName,D1
  14072.     MOVE.L    #1005,D2
  14073.     MOVE.L    DOSbase(PC),A6
  14074.     JSR    LVOOpen(A6)
  14075.     MOVE.L    D0,FileHandle
  14076.     BEQ.S    rpnskp2
  14077.     MOVE.L    D0,D1
  14078.     LEA    chkiffbuffer(PC),A2
  14079.     CLR.L    (A2)
  14080.     MOVE.L    A2,D2
  14081.     MOVEQ    #12,D3
  14082.     JSR    LVORead(A6)
  14083.     CMP.L    #"FORM",(A2)
  14084.     BNE.S    rpnclse
  14085.     CMP.L    #"8SVX",8(A2)
  14086.     BNE.S    rpnclse
  14087. rpnvhdr    MOVE.L    FileHandle(PC),D1
  14088.     MOVE.L    A2,D2
  14089.     MOVEQ    #4,D3
  14090.     JSR    LVORead(A6)
  14091.     TST.L    D0
  14092.     BEQ.S    rpnclse
  14093.     CMP.L    #"VHDR",(A2)
  14094.     BNE.S    rpnvhdr
  14095.     MOVE.L    FileHandle(PC),D1
  14096.     MOVE.L    A2,D2
  14097.     MOVEQ    #12,D3
  14098.     JSR    LVORead(A6)
  14099.     MOVE.L    8(A2),D0
  14100.     BEQ.S    rpnclse
  14101.     LSR.W    #1,D0
  14102.     MOVE.W    D0,PresetReplen
  14103.     MOVE.L    4(A2),D0
  14104.     LSR.W    #1,D0
  14105.     MOVE.W    D0,PresetRepeat
  14106. rpnclse    MOVE.L    FileHandle(PC),D1
  14107.     JSR    LVOClose(A6)
  14108. rpnskp2    BSR    AddPreset
  14109.     BSR    ShowPEDnumbers
  14110.     BRA    IsPLSTfull
  14111.  
  14112. chkiffbuffer
  14113.     dc.l    0,0,0
  14114.  
  14115. CouldBeInfo
  14116.     CMP.B    #'i',(A0)+
  14117.     BNE    rpnskip
  14118.     CMP.B    #'n',(A0)+
  14119.     BNE    rpnskip
  14120.     CMP.B    #'f',(A0)+
  14121.     BNE    rpnskip
  14122.     CMP.B    #'o',(A0)+
  14123.     BNE    rpnskip
  14124.     CMP.B    #0,(A0)+
  14125.     BNE    rpnskip
  14126.     BRA    IsPLSTFull
  14127.  
  14128.  
  14129. ReadPathEnd
  14130.     MOVE.L    DOSbase(PC),A6
  14131.     MOVE.L    FileLock(PC),D1
  14132.     BEQ    rpeskip
  14133.     JSR    LVOUnLock(A6)
  14134. rpeskip    JSR    SetNormalPtrCol
  14135.     BSR    ShowPresetNames
  14136.     BRA    ShowAllRight
  14137.  
  14138. UnlockReadPath
  14139.     MOVE.L    DOSbase(PC),A6
  14140.     MOVE.L    FileLock(PC),D1
  14141.     BEQ    urpend
  14142.     JSR    LVOUnLock(A6)
  14143. urpend    JMP    SetErrorPtrCol
  14144.  
  14145. AddPreset
  14146.     LEA    PEdDefaultVol(PC),A0
  14147.     LEA    PresetName(PC),A1
  14148.     MOVEQ    #5,D0    ; Disk; ST-XX...
  14149. aploop    MOVE.B    (A0)+,(A1)+
  14150.     DBRA    D0,aploop
  14151.     LEA    FIB_FileName,A0
  14152.     MOVEQ    #14,D0    ; Name; 16 letters.
  14153. aploop2    MOVE.B    (A0)+,(A1)+
  14154.     BNE    apskip
  14155.     SUBQ.L    #1,A0
  14156. apskip    DBRA    D0,aploop2
  14157.     CLR.B    (A1)
  14158.     MOVE.L    FIB_FileSize,D0
  14159.     CMP.L    #$FFFE,D0
  14160.     BLS.S    apskip2
  14161.     MOVE.W    #$FFFE,D0
  14162. apskip2    LSR.W    #1,D0
  14163.     MOVE.W    D0,PresetLength
  14164.     CLR.W    PresetFineTune
  14165.     LEA    PresetName(PC),A6
  14166.     BSR    PED_CheckAdd
  14167.     ADDQ.W    #1,PresetTotal
  14168.     ADD.L    #30,MaxPLSTOffset
  14169.     RTS
  14170.  
  14171. PED_Insert
  14172.     TST.L    PLSTmem
  14173.     BNE    pediwok
  14174.     BSR    AllocPLST
  14175.     TST.L    PLSTmem
  14176.     BEQ    PLSTMemErr
  14177. pediwok    MOVE.W    PresetTotal(PC),D0
  14178.     CMP.W    MaxPLSTEntries2,D0
  14179.     BHS    PLSTisFull
  14180.     LEA    InsertPsetText(PC),A0
  14181.     LEA    PresetName(PC),A1
  14182.     MOVEQ    #39,D0
  14183. pediloop
  14184.     MOVE.B    (A0)+,(A1)+
  14185.     DBRA    D0,pediloop
  14186. PossibleEdit
  14187.     JSR    StorePtrCol
  14188.     JSR    SetWaitPtrCol
  14189.     MOVE.L    TextBplPtr(PC),A0
  14190.     LEA    2320(A0),A0
  14191.     MOVEQ    #59,D0
  14192. pediloop2
  14193.     CLR.L    (A0)+
  14194.     DBRA    D0,pediloop2
  14195.     LEA    EnterDataText(PC),A0
  14196.     BSR    ShowStatusText
  14197.     MOVE.W    #63,LineCurY
  14198.     LEA    PresetName(PC),A6
  14199.     MOVEQ    #3,D7
  14200.     MOVE.B    #4,EnterTextFlag
  14201. ShowPsetText
  14202.     LEA    PresetName+3(PC),A0
  14203.     MOVEQ    #37,D0
  14204.     MOVE.W    #2321,D1
  14205.     BSR    ShowText3
  14206.     MOVE.W    D7,D0
  14207.     SUBQ.W    #3,D0
  14208.     ASL.W    #3,D0
  14209.     ADD.W    #12,D0
  14210.     MOVE.W    D0,LineCurX
  14211.     BSR    UpdateLineCurPos
  14212. pediwaitkey
  14213.     JSR    DoKeyBuffer
  14214.     MOVE.B    RawKeyCode(PC),D0
  14215.     BEQ    pediwaitkey
  14216.     CLR.B    RawKeyCode
  14217.     BTST    #7,D0
  14218.     BNE    pediwaitkey
  14219.     AND.W    #$FF,D0
  14220.     CMP.B    #69,D0
  14221.     BEQ    PED_ESCkey
  14222.     CMP.B    #65,D0
  14223.     BEQ    PED_BkspaceKey
  14224.     CMP.B    #68,D0
  14225.     BEQ    PED_ReturnKey
  14226.     CMP.B    #79,D0
  14227.     BEQ    PED_LeftArrowKey
  14228.     CMP.B    #78,D0
  14229.     BEQ    PED_RightArrowKey
  14230.     CMP.B    #64,D0
  14231.     BHI    pediwaitkey
  14232.     CMP.W    #40,D7
  14233.     BEQ    pediwaitkey
  14234.     CMP.W    #22,D7
  14235.     BEQ    pediwaitkey
  14236.     LEA    UnshiftedKeymap(PC),A0
  14237.     TST.W    ShiftKeyStatus
  14238.     BEQ    ShiftKeySkip
  14239.     LEA    ShiftedKeymap(PC),A0
  14240. ShiftKeySkip
  14241.     MOVE.B    0(A0,D0.W),D1
  14242.     BEQ    pediwaitkey
  14243.  
  14244.     CMP.W    #6,D7
  14245.     BLO.S    hexchk2
  14246.     CMP.W    #25,D7
  14247.     BLO    PED_PrintChar
  14248. hexchk2    CMP.B    #'0',D1
  14249.     BLO    pediwaitkey
  14250.     CMP.B    #'f',D1
  14251.     BHI    pediwaitkey
  14252.     CMP.B    #'9',D1
  14253.     BLS    PED_PrintChar
  14254.     CMP.B    #'a',D1
  14255.     BHS    PED_PrintChar
  14256.     BRA    pediwaitkey
  14257.  
  14258. PED_PrintChar
  14259.     MOVE.B    D1,(A6,D7.W)
  14260.     BRA    PED_RightArrowKey
  14261.  
  14262. PED_ReturnKey
  14263.     CMP.B    #' ',PsetNameText
  14264.     BEQ    PED_ESCkey
  14265.     LEA    PsetVolText(PC),A0
  14266.     LEA    fitutexttab+32(PC),A1
  14267.     MOVE.B    (A0)+,D1
  14268.     LSL.W    #8,D1
  14269.     MOVE.B    (A0),D1
  14270.     MOVEQ    #15,D0
  14271. vofloop    CMP.W    -(A1),D1
  14272.     BEQ.S    vofound
  14273.     DBRA    D0,vofloop
  14274.     MOVEQ    #0,D0
  14275. vofound    MOVE.W    D0,PresetFineTune
  14276.     LEA    PsetLenText(PC),A0
  14277.     BSR    HexToInteger
  14278.     LSR.W    #1,D0
  14279.     MOVE.W    D0,PresetLength
  14280.     LEA    PsetRepeatText(PC),A0
  14281.     BSR    HexToInteger
  14282.     LSR.W    #1,D0
  14283.     MOVE.W    D0,PresetRepeat
  14284.     LEA    PsetReplenText(PC),A0
  14285.     BSR    HexToInteger
  14286.     LSR.W    #1,D0
  14287.     MOVE.W    D0,PresetReplen
  14288.     BSR    PED_CheckAdd
  14289.     ADDQ.W    #1,PresetTotal
  14290. PED_ESCkey
  14291.     CLR.W    LineCurX
  14292.     MOVE.W    #270,LineCurY
  14293.     BSR    UpdateLineCurPos
  14294.     BSR    ShowPresetNames
  14295.     BSR    ShowPEDnumbers
  14296.     BSR    ShowAllRight
  14297.     CLR.B    EnterTextFlag
  14298.     JMP    RestorePtrCol
  14299.  
  14300. PED_BkspaceKey
  14301.     CMP.W    #23,D7
  14302.     BHS    pedbsend
  14303.     CMP.W    #6,D7
  14304.     BLS    pedbsend
  14305.     SUBQ.W    #1,D7
  14306.     MOVE.B    #' ',(A6,D7.W)
  14307. pedbsend
  14308.     BRA    ShowPsetText
  14309.  
  14310. PED_LeftArrowKey
  14311.     SUBQ.W    #1,D7
  14312.     CMP.W    #2,D7
  14313.     BLS    pedlakskip2
  14314.     CMP.W    #5,D7
  14315.     BEQ    pedlakskip
  14316.     CMP.W    #22,D7
  14317.     BEQ    pedlakskip
  14318.     CMP.W    #25,D7
  14319.     BEQ    pedlakskip
  14320.     CMP.W    #30,D7
  14321.     BEQ    pedlakskip
  14322.     CMP.W    #35,D7
  14323.     BEQ    pedlakskip
  14324.     BRA    ShowPsetText
  14325.  
  14326. pedlakskip
  14327.     SUBQ.W    #1,D7
  14328.     BRA    ShowPsetText
  14329.  
  14330. pedlakskip2
  14331.     MOVEQ    #3,D7
  14332.     BRA    ShowPsetText
  14333.  
  14334. PED_RightArrowKey
  14335.     ADDQ.W    #1,D7
  14336.     CMP.W    #5,D7
  14337.     BEQ    pedrakskip
  14338.     CMP.W    #22,D7
  14339.     BEQ    pedrakskip
  14340.     CMP.W    #25,D7
  14341.     BEQ    pedrakskip
  14342.     CMP.W    #30,D7
  14343.     BEQ    pedrakskip
  14344.     CMP.W    #35,D7
  14345.     BEQ    pedrakskip
  14346.     CMP.W    #40,D7
  14347.     BHS    pedrakskip2
  14348.     BRA    ShowPsetText
  14349.  
  14350. pedrakskip
  14351.     ADDQ.W    #1,D7
  14352.     BRA    ShowPsetText
  14353.  
  14354. pedrakskip2
  14355.     MOVEQ    #39,D7
  14356.     BRA    ShowPsetText
  14357.  
  14358. PED_CheckAdd
  14359.     MOVEQ    #23,D0
  14360. pedcaloop
  14361.     SUBQ.W    #1,D0
  14362.     CMP.B    #' ',0(A6,D0.W)
  14363.     BEQ    pedcaloop
  14364.     CLR.B    1(A6,D0.W)
  14365.     MOVE.L    PLSTmem(PC),A5
  14366.     LEA    30(A5),A5
  14367. pedccnextloop
  14368.     MOVEQ    #6,D0
  14369.     TST.B    6(A5)
  14370.     BEQ    PED_AddPreset
  14371. PED_ConvertLoop
  14372.     MOVE.B    0(A5,D0.W),D2
  14373.     BNE    PED_ConvertCase
  14374.     TST.B    0(A6,D0.W)
  14375.     BNE    PED_ConvertCase
  14376.     CLR.B    6(A5)
  14377.     SUBQ.W    #1,PresetTotal
  14378.     BRA    PED_AddPreset
  14379.  
  14380. PED_ConvertCase
  14381.     CMP.B    #'A',D2
  14382.     BLO    pedccskip
  14383.     CMP.B    #'Z',D2
  14384.     BHI    pedccskip
  14385.     ADD.B    #32,D2
  14386. pedccskip
  14387.     MOVE.B    0(A6,D0.W),D1
  14388.     CMP.B    #' ',D1
  14389.     BEQ    pedccskip3
  14390.     CMP.B    #'A',D1
  14391.     BLO    pedccskip2
  14392.     CMP.B    #'Z',D1
  14393.     BHI    pedccskip2
  14394.     ADD.B    #32,D1
  14395. pedccskip2
  14396.     CMP.B    D2,D1
  14397.     BEQ    pedccnext
  14398.     BHI    pedccskip3
  14399.     BRA    PED_AddPreset
  14400.  
  14401. pedccnext
  14402.     ADDQ.W    #1,D0
  14403.     CMP.W    #22,D0
  14404.     BNE    PED_ConvertLoop
  14405. pedccskip3
  14406.     LEA    30(A5),A5
  14407.     BRA    pedccnextloop
  14408.  
  14409. PED_AddPreset    TST.B    6(A5)
  14410.     BEQ    pedapskip
  14411.     MOVE.L    PLSTmem(PC),A1
  14412.     MOVE.W    PresetTotal(PC),D0
  14413.     CMP.W    #1,D0
  14414.     BEQ    pedapskip
  14415.     MULU    #30,D0
  14416.     ADD.L    D0,A1
  14417.     LEA    30(A1),A1
  14418.     CLR.B    31(A1)
  14419. pedaploop
  14420.     MOVE.W    (A1),30(A1)
  14421.     SUBQ.L    #2,A1
  14422.     CMP.L    A1,A5
  14423.     BLS    pedaploop
  14424. pedapskip
  14425.     MOVEQ    #21,D0
  14426. pedaploop2
  14427.     MOVE.B    0(A6,D0.W),D1
  14428.     CMP.B    #'A',D1
  14429.     BLO    pedapskip2
  14430.     CMP.B    #'Z',D1
  14431.     BHI    pedapskip2
  14432.     ADD.B    #32,D1
  14433. pedapskip2
  14434.     CMP.B    #' ',D1
  14435.     BNE    pedapskip3
  14436.     MOVEQ    #0,D1
  14437. pedapskip3
  14438.     MOVE.B    D1,0(A5,D0.W)
  14439.     DBRA    D0,pedaploop2
  14440.     MOVE.W    PresetLength(PC),22(A5)
  14441.     MOVE.B    PresetFineTune+1(PC),24(A5)
  14442.     MOVE.B    #$40,25(A5)
  14443.     MOVE.W    PresetRepeat(PC),26(A5)
  14444.     MOVE.W    PresetReplen(PC),28(A5)
  14445.     RTS
  14446.  
  14447. HexToInteger
  14448.     MOVEQ    #0,D0
  14449.     BSR    Single_hti
  14450.     LSL.W    #8,D1
  14451.     LSL.W    #4,D1
  14452.     OR.W    D1,D0
  14453.     BSR    Single_hti
  14454.     LSL.W    #8,D1
  14455.     OR.W    D1,D0
  14456. HexToInteger2
  14457.     BSR    Single_hti
  14458.     LSL.W    #4,D1
  14459.     OR.W    D1,D0
  14460.     BSR    Single_hti
  14461.     OR.W    D1,D0
  14462.     RTS
  14463.  
  14464. Single_hti
  14465.     MOVEQ    #0,D1
  14466.     MOVE.B    (A0)+,D1
  14467.     CMP.B    #$60,D1
  14468.     BLO    shtiskip
  14469.     SUB.B    #$20,D1
  14470. shtiskip
  14471.     SUB.B    #$30,D1
  14472.     CMP.B    #9,D1
  14473.     BLS    Return2
  14474.     SUBQ.B    #7,D1
  14475.     RTS
  14476.  
  14477. PED_Delete
  14478.     JSR    SetDeletePtrCol
  14479.     MOVE.W    #1,PED_Action
  14480.     LEA    SelectEntryText(PC),A0
  14481.     BRA    ShowStatusText
  14482.  
  14483. PED_ClearPLST
  14484.     LEA    ClearPLSTText,A0
  14485.     JSR    AreYouSure
  14486.     BNE    Return2
  14487.     BSR    FreePLST
  14488.     BRA    PED_Refresh
  14489.  
  14490. ClearPLSTText    dc.b 'clear plst ?',0,0
  14491.  
  14492. PED_Print
  14493.     LEA    PrintPLSTText,A0
  14494.     JSR    AreYouSure
  14495.     BNE    Return2
  14496.     JSR    StorePtrCol
  14497.     MOVE.L    DOSbase(PC),A6
  14498.     MOVE.L    #PrintPath,D1
  14499.     MOVE.L    #1006,D2
  14500.     JSR    LVOOpen(A6)
  14501.     MOVE.L    D0,FileHandle
  14502.     BEQ    CantOpenFile
  14503.     JSR    SetDiskPtrCol
  14504.     MOVE.L    D0,D1
  14505.     MOVE.L    #PsetPLSTtext,D2
  14506.     MOVEQ    #56,D3
  14507.     JSR    LVOWrite(A6)
  14508.     LEA    PrintingPLSTText(PC),A0
  14509.     BSR    ShowStatusText
  14510.     CLR.W    PsetNumTemp
  14511. pedpmainloop    
  14512.     MOVE.W    PsetNumTemp(PC),D0
  14513.     LEA    PsetPrtNumText(PC),A0
  14514.     BSR    IntToDecASCII
  14515.     MOVE.L    PLSTmem(PC),A0
  14516.     MOVE.W    PsetNumTemp(PC),D0
  14517.     MULU    #30,D0
  14518.     ADD.L    D0,A0
  14519.     MOVE.L    A0,PsetPtrTemp
  14520.     LEA    PsetPrtNameText(PC),A1
  14521.     MOVE.L    A1,A2
  14522.     MOVEQ    #19,D1
  14523. FillSpaceLoop
  14524.     MOVE.B    #' ',(A2)+
  14525.     DBRA    D1,FillSpaceLoop
  14526.     MOVEQ    #19,D1
  14527. pedploop
  14528.     TST.B    (A0)
  14529.     BEQ    pedpskip
  14530.     MOVE.B    (A0)+,(A1)+
  14531.     DBRA    D1,pedploop
  14532. pedpskip
  14533.     MOVE.L    PsetPtrTemp(PC),A1
  14534.     MOVE.W    22(A1),D0
  14535.     LEA    PsetPrtLenText(PC),A0
  14536.     BSR    IntToHexASCII
  14537.     MOVE.L    PsetPtrTemp(PC),A1
  14538.     MOVE.W    26(A1),D0
  14539.     LEA    PsetPrtRepeatText(PC),A0
  14540.     BSR    IntToHexASCII
  14541.     MOVE.L    PsetPtrTemp(PC),A1
  14542.     MOVE.W    28(A1),D0
  14543.     ADD.W    D0,D0
  14544.     LEA    PsetPrtRepLenText(PC),A0
  14545.     BSR    IntToHexASCII
  14546.     MOVE.L    FileHandle(PC),D1
  14547.     MOVE.L    #PsetPrtNumText,D2
  14548.     MOVEQ    #53,D3
  14549.     JSR    LVOWrite(A6)
  14550.     BTST    #2,$DFF016
  14551.     BEQ    AbortPLSTPrint
  14552.     ADDQ.W    #1,PsetNumTemp
  14553.     MOVE.W    PsetNumTemp(PC),D0
  14554.     CMP.W    PresetTotal(PC),D0
  14555.     BNE    pedpmainloop
  14556.     BRA    pedpend
  14557.  
  14558. AbortPLSTPrint
  14559.     LEA    OprAbortedText(PC),A0
  14560.     BSR    ShowStatusText
  14561.     JSR    SetErrorPtrCol
  14562. pedpend    MOVE.L    FileHandle(PC),D1
  14563.     JSR    LVOClose(A6)
  14564.     BSR    ShowAllRight
  14565.     JMP    RestorePtrCol
  14566.  
  14567. IntToDecASCII
  14568.     MOVEQ    #3,D3
  14569.     MOVE.L    #1000,D2
  14570. itdloop    EXT.L    D0
  14571.     DIVU    D2,D0
  14572.     ADD.B    #'0',D0
  14573.     MOVE.B    D0,(A0)+
  14574.     DIVU    #10,D2
  14575.     SWAP    D0
  14576.     DBRA    D3,itdloop
  14577.     RTS
  14578.  
  14579. IntToHex2
  14580.     MOVEQ    #1,D2
  14581.     BRA    ithaloop
  14582.  
  14583. IntToHexASCII
  14584.     MOVEQ    #3,D2
  14585. ithaloop
  14586.     MOVE.W    D0,D1
  14587.     AND.B    #15,D1
  14588.     CMP.B    #10,D1
  14589.     BLO    ithaskip
  14590.     ADDQ.B    #7,D1
  14591. ithaskip
  14592.     ADD.B    #'0',D1
  14593.     MOVE.B    D1,-(A0)
  14594.     ROR.W    #4,D0
  14595.     DBRA    D2,ithaloop
  14596.     RTS
  14597.  
  14598. WritePLST
  14599.     LEA    SavePLSTText,A0
  14600.     JSR    AreYouSure
  14601.     BNE    Return2
  14602.     JSR    StorePtrCol
  14603.     JSR    SetDiskPtrCol
  14604.     LEA    SavingPLSTText(PC),A0
  14605.     BSR    ShowStatusText
  14606.     LEA    PTPath,A0
  14607.     JSR    CopyPath
  14608.     LEA    PLSTName(PC),A0
  14609.     MOVEQ    #4,D0
  14610. dsploop    MOVE.B    (A0)+,(A1)+
  14611.     DBRA    D0,dsploop
  14612.     MOVE.L    #FileName,D1
  14613.     MOVE.L    #1006,D2
  14614.     MOVE.L    DOSbase(PC),A6
  14615.     JSR    LVOOpen(A6)
  14616.     MOVE.L    D0,D7
  14617.     BEQ    CantOpenFile
  14618.     MOVE.L    D0,D1
  14619.     MOVE.L    PLSTmem(PC),D2
  14620.     MOVE.W    PresetTotal(PC),D3
  14621.     MULU    #30,D3
  14622.     JSR    LVOWrite(A6)
  14623.     MOVE.L    D7,D1
  14624.     JSR    LVOClose(A6)
  14625.     BSR    ShowAllRight
  14626.     JMP    RestorePtrCol
  14627.  
  14628. CheckPEDnames
  14629.     CMP.W    #307,D0
  14630.     BLO    PED_PsetHit
  14631.     CLR.W    PED_Action
  14632.     JSR    SetNormalPtrCol
  14633.     CMP.W    #122,D1
  14634.     BHS    Return2
  14635.     CMP.W    #111,D1
  14636.     BHS    PED_Bottom    
  14637.     CMP.W    #100,D1
  14638.     BHS.S    PED_OneDown
  14639.     CMP.W    #67,D1
  14640.     BHS    PED_Exit
  14641.     CMP.W    #56,D1
  14642.     BHS.S    PED_OneUp
  14643.     BRA.S    PED_Top
  14644.  
  14645. PED_OneUp    
  14646.     SUBQ.W    #1,PEDpos
  14647.     TST.W    ShiftKeyStatus
  14648.     BNE.S    poup2
  14649.     BTST    #2,$DFF016
  14650.     BNE.S    pedouskip
  14651. poup2    SUBQ.W    #7,PEDpos
  14652. pedouskip    
  14653.     CMP.W    #1,PEDpos
  14654.     BGE    ShowPresetNames
  14655. PED_Top    MOVE.W    #1,PEDpos
  14656.     BRA    ShowPresetNames
  14657.  
  14658. PED_OneDown    
  14659.     CMP.W    #9,PresetTotal
  14660.     BLO    ShowPresetNames
  14661.     ADDQ.W    #1,PEDpos
  14662.     TST.W    ShiftKeyStatus
  14663.     BNE.S    podn2
  14664.     BTST    #2,$DFF016
  14665.     BNE.S    pedodskip
  14666. podn2    ADDQ.W    #7,PEDpos
  14667. pedodskip    
  14668.     MOVE.W    PresetTotal,D0
  14669.     SUB.W    #10,D0
  14670.     CMP.W    PEDpos,D0
  14671.     BHS    ShowPresetNames
  14672. pedodsx    MOVE.W    D0,PEDpos
  14673.     BRA    ShowPresetNames
  14674.  
  14675. PED_Bottom
  14676.     MOVE.W    PresetTotal(PC),D0
  14677.     SUB.W    #11,D0
  14678.     BMI.S    PED_Top    
  14679.     ADDQ.W    #1,D0
  14680.     BRA.S    pedodsx
  14681.  
  14682. ShowPresetNames
  14683.     MOVE.W    #2321,D6
  14684.     MOVEQ    #9,D7
  14685.     MOVE.L    PLSTmem(PC),D0
  14686.     BEQ    Return2
  14687.     MOVE.L    D0,A5
  14688.     MOVE.W    PEDpos(PC),D0
  14689.     MULU    #30,D0
  14690.     ADD.L    D0,A5
  14691. spndploop
  14692.     TST.B    (A5)
  14693.     BEQ    Return2
  14694.     LEA    PresetNameText,A1
  14695.     MOVEQ    #21,D0
  14696. spnloop    MOVE.B    #' ',(A1)+
  14697.     DBRA    D0,spnloop
  14698.     MOVE.L    A5,A0
  14699.     ADDQ.L    #3,A0
  14700.     LEA    -22(A1),A1
  14701. spnloop2
  14702.     MOVE.B    (A0)+,D0
  14703.     BEQ.S    DisplayPreset
  14704.     MOVE.B    D0,(A1)+
  14705.     BRA.S    spnloop2
  14706.  
  14707. fitutexttab
  14708.     dc.b " 0+1+2+3+4+5+6+7-8-7-6-5-4-3-2-1"
  14709.  
  14710. DisplayPreset
  14711.     MOVEQ    #19,D0
  14712.     LEA    PresetNameText,A0
  14713.     MOVE.W    D6,D1
  14714.     BSR    ShowText3
  14715.     ADD.W    #20,D6
  14716.     MOVE.W    D6,TextOffset
  14717.     MOVEQ    #0,D0
  14718.     MOVE.B    24(A5),D0
  14719.     AND.B    #$0F,D0
  14720.     ADD.W    D0,D0
  14721.     LEA    fitutexttab(PC,D0.W),A0
  14722.     MOVE.W    #2,TextLength
  14723.     BSR    ShowText2
  14724.     MOVE.W    22(A5),D0
  14725.     ADD.W    D0,D0
  14726.     MOVE.W    D0,WordNumber
  14727.     ADDQ.W    #1,TextOffset
  14728.     BSR    PrintHexWord
  14729.     MOVE.W    26(A5),D0
  14730.     ADD.W    D0,D0
  14731.     MOVE.W    D0,WordNumber
  14732.     ADDQ.W    #1,TextOffset
  14733.     BSR    PrintHexWord
  14734.     MOVE.W    28(A5),D0
  14735.     ADD.W    D0,D0
  14736.     MOVE.W    D0,WordNumber
  14737.     ADDQ.W    #1,TextOffset
  14738.     BSR    PrintHexWord
  14739.     ADD.W    #220,D6   ; 218
  14740.     LEA    30(A5),A5
  14741.     DBRA    D7,spndploop
  14742.     RTS
  14743.  
  14744. PED_EnterPath
  14745.     JSR    StorePtrCol
  14746.     JSR    SetWaitPtrCol
  14747.     CLR.L    EditMode
  14748.     LEA    PEdDefaultPath(PC),A6
  14749.     BSR    UpdateLineCurPos
  14750.     MOVE.L    A6,TextEndPtr
  14751.     MOVE.L    A6,ShowTextPtr
  14752.     ADD.L    #31,TextEndPtr
  14753.     MOVE.W    #20,TextLength
  14754.     MOVE.L    #178,A4
  14755.     BSR    GetTextLine
  14756.     CLR.L    TextEndPtr
  14757.     JMP    RestorePtrCol
  14758.  
  14759. PED_Disk
  14760.     JSR    StorePtrCol
  14761.     JSR    SetWaitPtrCol
  14762.     CLR.L    EditMode
  14763.     CLR.B    SndDiskNum0
  14764.     CLR.B    SndDiskNum1
  14765.     LEA    SndDiskNum0(PC),A6
  14766.     MOVE.L    A6,TextEndPtr
  14767.     MOVE.L    A6,ShowTextPtr
  14768.     ADDQ.L    #2,TextEndPtr
  14769.     MOVE.W    #2,TextLength
  14770.     MOVE.L    #621,A4
  14771.     MOVE.B    #3,EnterTextFlag
  14772.     BSR    GetTextLine
  14773.     LEA    SndDiskNum0(PC),A6
  14774.     MOVE.B    #':',2(A6)
  14775.     CLR.B    EnterTextFlag
  14776.     CLR.L    TextEndPtr
  14777.     JMP    RestorePtrCol
  14778.  
  14779. ShowPEDnumbers
  14780.     MOVE.W    PresetTotal,WordNumber
  14781.     MOVE.W    #1061,TextOffset
  14782.     BSR    Print4DecDigits
  14783.     LEA    PEdDefaultPath,A0
  14784.     MOVE.W    #178,D1
  14785.     MOVEQ    #20,D0
  14786.     BSR    ShowText3
  14787.     LEA    PEdDefaultVol,A0
  14788.     MOVE.W    #618,D1
  14789.     MOVEQ    #6,D0
  14790.     BRA    ShowText3
  14791.  
  14792. PED_PsetHit
  14793.     CMP.W    #1,PresetTotal
  14794.     BEQ.S    pedphend
  14795.     MOVE.W    MouseY2(PC),D0
  14796.     CMP.W    #59,D0
  14797.     BLO.S    pedphend
  14798.     CMP.W    #119,D0
  14799.     BHS.S    pedphend
  14800.     SUB.W    #59,D0
  14801.     DIVU    #6,D0
  14802.     MOVE.L    D0,D1
  14803.     SWAP    D1
  14804.     CMP.W    #5,D1
  14805.     BEQ.S    pedphend
  14806.     MOVE.W    D0,D2
  14807.     ADD.W    PEDpos(PC),D2
  14808.     CMP.W    PresetTotal(PC),D2
  14809.     BHI.S    pedphend
  14810.     MULU    #30,D0
  14811.     MOVE.L    PLSTmem(PC),A5
  14812.     ADD.L    D0,A5
  14813.     MOVE.W    PEDpos(PC),D0
  14814.     MULU    #30,D0
  14815.     ADD.L    D0,A5
  14816.     TST.W    PED_Action
  14817.     BEQ.S    PED_CopyName
  14818.     CMP.W    #1,PED_Action
  14819.     BEQ    PED_DoDelete
  14820. pedphend
  14821.     RTS
  14822.  
  14823. PED_CopyName
  14824.     LEA    PresetName(PC),A0
  14825.     MOVEQ    #21,D0
  14826. pedcnloop
  14827.     MOVE.B    (A5)+,D1
  14828.     BNE    pedcnskip
  14829.     MOVE.B    #' ',D1
  14830. pedcnskip
  14831.     MOVE.B    D1,(A0)+
  14832.     DBRA    D0,pedcnloop
  14833.     MOVEQ    #0,D0
  14834.     MOVE.B    2(A5),D0
  14835.     AND.B    #$0F,D0
  14836.     ADD.W    D0,D0
  14837.     LEA    fitutexttab(PC),A1
  14838.     LEA    (A1,D0.W),A1
  14839.     LEA    PsetVolText(PC),A0
  14840.     MOVE.B    #' ',-1(A0)
  14841.     MOVE.B    (A1)+,(A0)+
  14842.     MOVE.B    (A1),(A0)
  14843.     MOVE.W    (A5),D0
  14844.     ADD.W    D0,D0
  14845.     LEA    6(A0),A0
  14846.     BSR    IntToHexASCII
  14847.     MOVE.W    4(A5),D0
  14848.     ADD.W    D0,D0
  14849.     LEA    9(A0),A0
  14850.     BSR    IntToHexASCII
  14851.     LEA    9(A0),A0
  14852.     MOVE.W    6(A5),D0
  14853.     ADD.W    D0,D0
  14854.     BSR    IntToHexASCII
  14855.     BRA    PossibleEdit
  14856.  
  14857. PED_DoDelete
  14858.     CLR.W    PED_Action
  14859.     LEA    DeletePresetText,A0
  14860.     JSR    AreYouSure
  14861.     BNE    Return2
  14862.     MOVE.L    PLSTmem(PC),A1
  14863.     MOVE.W    PresetTotal(PC),D0
  14864.     MULU    #30,D0
  14865.     ADD.L    D0,A1
  14866. pedddloop
  14867.     MOVE.W    30(A5),(A5)
  14868.     ADDQ.L    #2,A5
  14869.     CMP.L    A5,A1
  14870.     BHI.S    pedddloop
  14871.     CLR.B    (A5)
  14872.     SUBQ.W    #1,PresetTotal
  14873.     SUB.L    #30,MaxPLSTOffset
  14874.     MOVE.W    PEDpos(PC),D0
  14875.     ADD.W    #9,D0
  14876.     CMP.W    PresetTotal(PC),D0
  14877.     BHI.S    pedddskip
  14878.     SUBQ.W    #1,PEDpos
  14879. pedddskip    
  14880.     BSR    ShowPEDnumbers
  14881.     BSR    ShowPresetNames
  14882.     JSR    SetNormalPtrCol
  14883.     JMP    StorePtrCol
  14884.  
  14885. sepc    JMP    SetErrorPtrCol
  14886.  
  14887. PLSTisFull
  14888.     LEA    PLSTFullText(PC),A0
  14889.     BSR    ShowStatusText
  14890.     JMP    SetErrorPtrCol
  14891.  
  14892. PED_DeleteDisk
  14893.     LEA    DelDiskText(PC),A0
  14894.     MOVE.B    snddisknum0(PC),10(A0)
  14895.     MOVE.B    snddisknum1(PC),11(A0)
  14896.     JSR    AreYouSure
  14897.     BNE    Return2
  14898.     JSR    StorePtrCol
  14899.     JSR    SetWaitPtrCol
  14900.     MOVE.L    PLSTmem(PC),A0
  14901.     MOVE.L    A0,A1
  14902.     MOVE.W    PresetTotal(PC),D0
  14903.     MULU    #30,D0
  14904.     ADD.L    D0,A1
  14905.     MOVE.L    snddisknum0-1(PC),D1
  14906.     MOVE.L    #$FF5F5FFF,D2
  14907.     AND.L    D2,D1
  14908. peddslo    MOVE.L    2(A0),D0
  14909.     AND.L    D2,D0
  14910.     CMP.L    D1,D0
  14911.     BNE.S    peddsno
  14912.     MOVE.L    A0,A2
  14913. peddslp    MOVE.W    30(A0),(A0)+
  14914.     CMP.L    A1,A0
  14915.     BLO.S    peddslp
  14916.     SUBQ.W    #1,PresetTotal
  14917.     SUB.L    #30,MaxPLSTOffset
  14918.     MOVE.L    A2,A0
  14919.     BRA.S    peddsn1
  14920. peddsno    LEA    30(A0),A0
  14921. peddsn1    CMP.L    A1,A0
  14922.     BLO.S    peddslo
  14923.     MOVE.W    #1,PEDpos
  14924.     BSR    ShowPEDnumbers
  14925.     BSR    ShowPresetNames
  14926.     JMP    RestorePtrCol
  14927.  
  14928. DelDiskText    dc.b "Delete ST-.. ?",0,0
  14929.  
  14930. ;************  MIDI Routines  ************
  14931.  
  14932. OpenMIDI
  14933.     TST.L    MIDIinBuffer
  14934.     BNE.S    omidisk
  14935.     MOVE.L    #256,D0
  14936.     MOVEQ    #MEMF_PUBLIC,D1
  14937.     MOVE.L    4.W,A6
  14938.     JSR    LVOAllocMem(A6)
  14939.     MOVE.L    D0,MIDIinBuffer
  14940.     BEQ    Return2
  14941. omidisk    CLR.B    MIDIinTo
  14942.     CLR.B    MIDIinFrom
  14943.     TST.W    mintflag
  14944.     BNE    Return2
  14945.     MOVE.L    $74,OldInt5+2
  14946.     MOVE.L    #MIDIinInter,$74
  14947.     MOVE.W    #$8800,$DFF09A ;intena
  14948.     MOVE.W    #114,$DFF032 ; Set serper speed, 31250 bit/s
  14949.     MOVE.W    #1,mintflag
  14950.     MOVEQ    #0,D0
  14951.     RTS
  14952.  
  14953. ;    MOVEQ    #11,D0
  14954. ;    LEA    MIDIinServer(PC),A1
  14955. ;    MOVE.L    4.W,A6
  14956. ;    JSR    LVOAddIntServer(A6)
  14957. ;    MOVE.W    #1,mintflag
  14958. ;    MOVE.W    #114,$DFF032 ; Set serper speed, 31250 bit/s
  14959. ;    RTS
  14960.  
  14961. CloseMIDI
  14962.     MOVE.L    MIDIinBuffer(PC),D0
  14963.     BEQ.S    clmskip
  14964.     MOVE.L    D0,A1
  14965.     MOVE.L    #256,D0
  14966.     MOVE.L    4.W,A6
  14967.     JSR    LVOFreeMem(A6)
  14968.     CLR.L    MIDIinBuffer
  14969. clmskip    TST.W    mintflag
  14970.     BEQ    Return2
  14971.     MOVE.W    #$0800,$DFF09A ;intena
  14972.     MOVE.L    OldInt5+2(PC),D0
  14973.     BEQ    PositiveReturn
  14974.     MOVE.L    D0,$74
  14975.     CLR.L    OldInt5+2
  14976.     RTS
  14977.  
  14978. ;    MOVEQ    #11,D0
  14979. ;    LEA    MIDIinServer(PC),A1
  14980. ;    MOVE.L    4.W,A6
  14981. ;    JSR    LVORemIntServer(A6)
  14982. ;    CLR.W    mintflag
  14983. ;    RTS
  14984.  
  14985. mintflag dc.w 0
  14986.  
  14987. ;MIDIinServer
  14988. ;    dc.l 0,0
  14989. ;    dc.b 2,10
  14990. ;    dc.l midiname
  14991. ;    dc.l 0,MIDIinInter
  14992. ;
  14993. ;midiname dc.b "Protracker MIDI",0
  14994.  
  14995. MIDIinInter
  14996.     BTST    #11,$DFF01E ;intreqr
  14997.     BNE    GetMIDIin
  14998. OldInt5    JMP    $0
  14999.  
  15000. GetMIDIin
  15001.     MOVEM.L    D0-D2/A0,-(SP)
  15002.     MOVE.W    $DFF018,D0 ; serdatr
  15003.     MOVE.W    #$0800,$DFF09A ;intena
  15004.     MOVE.W    #$0800,$DFF09C ;intreq
  15005. ;    CMP.B    #$F8,D0    ; Timing Clock
  15006. ;    BNE    gmiskip
  15007. ;    TST.B    MIDISync
  15008. ;    BEQ    gmiexit
  15009. ;    BSR    IntMusic
  15010. ;    BRA    gmiexit
  15011. gmiskip    MOVEQ    #0,D1
  15012.     MOVE.B    MIDIinTo(PC),D1
  15013.     MOVE.L    D1,D2
  15014.     ADDQ.B    #1,D2
  15015.     CMP.B    MIDIinFrom(PC),D2
  15016.     BEQ    gmiexit    ; Buffer overflow
  15017.     MOVE.L    MIDIinBuffer(PC),A0
  15018.     MOVE.B    D0,(A0,D1.W)
  15019.     MOVE.B    D2,MIDIinTo
  15020. gmiexit    MOVE.W    #$8800,$DFF09A ;intena
  15021.     MOVEM.L    (SP)+,D0-D2/A0
  15022.     RTE
  15023.  
  15024. MIDIin    MOVE.B    MIDIinFrom(PC),D0
  15025.     CMP.B    MIDIinTo(PC),D0
  15026.     BNE    migetbyt
  15027.     MOVEQ    #2,D1
  15028.     RTS
  15029. migetbyt
  15030.     MOVE.L    MIDIinBuffer(PC),A0
  15031.     MOVE.B    (A0,D0.W),D0
  15032.     ADDQ.B    #1,MIDIinFrom
  15033.     MOVEQ    #0,D1
  15034.     RTS
  15035.  
  15036. MIDIout    MOVE.W    $DFF018,D1 ; serdatr
  15037.     BTST    #13,D1
  15038.     BEQ    MIDIout
  15039.     AND.W    #$00ff,D0
  15040.     OR.W    #$0300,D0
  15041.     MOVE.W    D0,$DFF030 ; serdat
  15042.     RTS
  15043.  
  15044. CheckMIDIin
  15045.     TST.B    MIDIFlag
  15046.     BEQ    Return2
  15047.     BSR    MIDIin
  15048.     TST.L    D1
  15049.     BEQ    mic_ok
  15050.     MOVE.B    #1,MIDIError
  15051.     RTS
  15052.  
  15053. mic_ok    CLR.B    MIDIError
  15054.     TST.B    D0
  15055.     BPL    mic_databyte
  15056. ;statusbyte here
  15057.     CMP.B    #$F0,D0
  15058.     BHS    MIDISysMessage
  15059.     MOVE.B    D0,MIDIRunStatus
  15060.     MOVE.B    D0,D1
  15061.     AND.B    #$F0,D1
  15062.     MOVE.B    D1,MIDIRunCommand
  15063.     AND.B    #$0F,D0
  15064.     MOVE.B    D0,MIDIRunChannel
  15065.     CLR.B    MIDIByteCount
  15066.     RTS
  15067.  
  15068. mic_databyte
  15069.     MOVE.B    MIDIRunCommand(PC),D1
  15070.     CMP.B    #$80,D1
  15071.     BEQ    M_NoteOff
  15072.     CMP.B    #$90,D1
  15073.     BEQ    M_NoteOn
  15074.     CMP.B    #$A0,D1
  15075.     BEQ    M_PolyTouch
  15076.     CMP.B    #$B0,D1
  15077.     BEQ    M_Control
  15078.     CMP.B    #$C0,D1
  15079.     BEQ    M_ProgChange
  15080.     CMP.B    #$D0,D1
  15081.     BEQ    M_MonoTouch
  15082.     CMP.B    #$E0,D1
  15083.     BEQ    M_PitchBend
  15084.     CMP.B    #$F0,D1
  15085.     BEQ    M_SysExData
  15086.     RTS
  15087.  
  15088. M_NoteOff
  15089.     TST.B    MIDIByteCount
  15090.     BNE    mnf_veloc
  15091.     MOVE.B    D0,MIDINote
  15092.     ADD.B    #1,MIDIByteCount
  15093.     RTS
  15094. mnf_veloc
  15095.     CLR.B    MIDIByteCount
  15096.     MOVE.B    D0,MIDIVelocity
  15097. ;    BSR    MidiPlay
  15098.     RTS
  15099.  
  15100. M_NoteOn
  15101.     TST.B    MIDIByteCount
  15102.     BNE    mno_veloc
  15103.     MOVE.B    D0,MIDINote
  15104.     ADD.B    #1,MIDIByteCount
  15105.     RTS
  15106. mno_veloc
  15107.     CLR.B    MIDIByteCount
  15108.     MOVE.B    D0,MIDIVelocity
  15109.     BEQ    mnf_veloc
  15110. ;* MidiPlay *
  15111.     MOVE.B    MIDINote,D0
  15112.     CMP.B    MIDIinTrans,D0
  15113.     BLO    miplskip
  15114.     SUB.B    MIDIinTrans(PC),D0
  15115.     CMP.B    #36,D0
  15116.     BLS    J_nkp
  15117.     RTS
  15118. miplskip
  15119.     CMP.B    XMIDI_Play,D0
  15120.     BEQ    J_PlaySong
  15121.     CMP.B    XMIDI_Pattern,D0
  15122.     BEQ    J_PlayPattern
  15123.     CMP.B    XMIDI_Edit,D0
  15124.     BEQ    J_Edit
  15125.     CMP.B    XMIDI_Record,D0
  15126.     BEQ    J_RecordPattern
  15127.     CMP.B    XMIDI_Stop,D0
  15128.     BEQ    J_StopIt
  15129.     RTS
  15130.  
  15131. J_nkp    JMP    nkpskip
  15132. J_PlaySong
  15133.     JMP    PlaySong
  15134. J_PlayPattern
  15135.     JMP    PlayPattern
  15136. J_Edit    JMP    Edit
  15137. J_RecordPattern
  15138.     JMP    RecordPattern
  15139. J_StopIt
  15140.     JMP    StopIt
  15141.  
  15142. MIDIinTrans    dc.b 60,0
  15143.  
  15144. XMIDI_Play    dc.b 40 ; E
  15145. XMIDI_Pattern    dc.b 38 ; D
  15146. XMIDI_Edit    dc.b 43 ; G
  15147. XMIDI_Record    dc.b 41 ; F
  15148. XMIDI_Stop    dc.b 36 ; C
  15149.         dc.b 0 ; free 0
  15150.  
  15151. ;    MOVE.B    MIDIRunStatus(PC),D0
  15152. ;    BSR    MIDIout
  15153. ;    MOVE.B    MIDINote(PC),D0
  15154. ;    ADD.B    #12,D0
  15155. ;    BSR    MIDIout
  15156. ;    MOVE.B    MIDIVelocity(PC),D0
  15157. ;    BSR    MIDIout
  15158. ;    RTS
  15159.  
  15160. M_PolyTouch
  15161.     TST.B    MIDIByteCount
  15162.     BNE    mpt_touch
  15163.     MOVE.B    D0,MIDINote
  15164.     ADD.B    #1,MIDIByteCount
  15165.     RTS
  15166. mpt_touch
  15167.     CLR.B    MIDIByteCount
  15168.     MOVE.B    D0,MIDITouch
  15169.     RTS
  15170.  
  15171. M_Control
  15172.     TST.B    MIDIByteCount
  15173.     BNE    mc_value
  15174.     MOVE.B    D0,MIDIController
  15175.     ADD.B    #1,MIDIByteCount
  15176.     RTS
  15177. mc_value
  15178.     CLR.B    MIDIByteCount
  15179.     MOVE.B    D0,MIDIlsb
  15180.     RTS
  15181.  
  15182. M_ProgChange
  15183.     MOVE.B    D0,MIDIProgram
  15184.     RTS
  15185. ;    ADDQ.B    #1,D0
  15186. ;    AND.B    #$1F,D0
  15187. ;    BNE    mpchskip
  15188. ;    TST.W    InsNum
  15189. ;    BEQ    mpchskip
  15190. ;    MOVE.W    InsNum(PC),LastInsNum
  15191. ;mpchskip
  15192. ;    MOVE.B    D0,InsNum+1
  15193. ;    BRA    ShowSampleInfo
  15194.  
  15195. M_MonoTouch
  15196.     MOVE.B    D0,MIDITouch
  15197.     RTS
  15198.  
  15199. M_PitchBend
  15200.     TST.B    MIDIByteCount
  15201.     BNE    mp_msb
  15202.     MOVE.B    D0,MIDIlsb
  15203.     ADD.B    #1,MIDIByteCount
  15204.     RTS
  15205. mp_msb    CLR.B    MIDIByteCount
  15206.     MOVE.B    D0,MIDImsb
  15207.     EXT.W    D0
  15208.     SUB.W    #128,D0
  15209.     MOVE.W    CurrentPlayNote,D1
  15210.     SUB.W    D0,D1
  15211.     CMP.W    #113,D1
  15212.     BLS.S    mp_2
  15213.     MOVE.W    #113,D1
  15214. mp_2    MOVE.L    NoteAddr,A0
  15215.     MOVE.W    D1,6(A0)
  15216.     RTS
  15217.  
  15218. NoteAddr    dc.l 0
  15219.  
  15220. M_rts    RTS
  15221.  
  15222. MIDISysMessage
  15223.     CMP.B    #$F0,D0
  15224.     BEQ    M_SysEx        ; System Exclusive
  15225.     CMP.B    #$F1,D0
  15226.     BEQ    M_rts        ; Quarter Frame (MIDI Time Code)
  15227.     CMP.B    #$F2,D0
  15228.     BEQ    M_SongPos    ; Song Position Pointer
  15229.     CMP.B    #$F3,D0
  15230.     BEQ    M_SongSelect    ; Song Select
  15231.     CMP.B    #$F4,D0
  15232.     BEQ    M_rts        ; -Reserved-
  15233.     CMP.B    #$F5,D0
  15234.     BEQ    M_rts        ; -Reserved-
  15235.     CMP.B    #$F6,D0
  15236.     BEQ    M_rts        ; -Reserved-
  15237.     CMP.B    #$F7,D0
  15238.     BEQ    M_EOX        ; End of System Exclusive
  15239.     CMP.B    #$F8,D0
  15240.     BEQ    M_rts        ; MIDI Timing Clock
  15241.     CMP.B    #$F9,D0
  15242.     BEQ    M_rts        ; -Reserved-
  15243.     CMP.B    #$FA,D0
  15244.     BEQ    M_Start        ; Start Message
  15245.     CMP.B    #$FB,D0
  15246.     BEQ    M_Continue    ; Continue Message
  15247.     CMP.B    #$FC,D0
  15248.     BEQ    M_Stop        ; Stop Message
  15249.     CMP.B    #$FD,D0
  15250.     BEQ    M_rts        ; --- Reserved ---
  15251.     CMP.B    #$FE,D0
  15252.     BEQ    M_rts        ; Active Sensing (Each 300ms if on)
  15253.     CMP.B    #$FF,D0
  15254.     BRA    M_rts        ; System Reset Message
  15255.  
  15256. M_SysEx        RTS
  15257. M_SysExData    RTS
  15258. M_SongPos    RTS
  15259. M_SongSelect    RTS
  15260. M_EOX        RTS
  15261.  
  15262. M_Start        JMP    PlaySong
  15263.  
  15264. M_Continue    RTS
  15265.  
  15266. M_Stop        JMP    StopIt
  15267.  
  15268. MIDIinBuffer    dc.l 0
  15269. MIDIinTo    dc.b 0
  15270. MIDIinFrom    dc.b 0
  15271.  
  15272. MIDIRunStatus    dc.b $80
  15273. MIDIRunChannel    dc.b 0
  15274. MIDIRunCommand    dc.b $08
  15275. MIDIByteCount    dc.b 0
  15276.  
  15277. MIDINote    dc.b 0
  15278. MIDIVelocity    dc.b 0
  15279. MIDITouch    dc.b 0
  15280. MIDIController    dc.b 0
  15281. MIDImsb        dc.b 0    
  15282. MIDIlsb        dc.b 0
  15283. MIDIProgram    dc.b 0
  15284. MIDIError    dc.b 0
  15285.  
  15286. ;---- Sampler Screen ----
  15287.  
  15288. SamplerScreen
  15289.     CLR.B    RawKeyCode
  15290.     JSR    WaitForButtonUp
  15291.     TST.W    SamScrEnable
  15292.     BNE    ExitFromSam
  15293.     MOVE.W    #1,SamScrEnable
  15294.     MOVE.L    EditMode(PC),SaveEditMode
  15295.     CLR.L    EditMode
  15296.  
  15297.     MOVE.L    TextBplPtr(PC),A0
  15298.     LEA    $15B8(A0),A0
  15299.     MOVE.L    A0,D0
  15300.     LEA    CopList2Bpl4Ptr,A1
  15301.     MOVE.W    D0,6(A1)
  15302.     SWAP    D0
  15303.     MOVE.W    D0,2(A1)
  15304.  
  15305.     MOVEQ    #0,D0
  15306.     MOVE.W    #270,D1
  15307.     MOVEQ    #14,D2
  15308.     LEA    CursorSpriteData,A0
  15309.     BSR    SetSpritePos
  15310.     JSR    SetSamSpritePtrs
  15311.     MOVE.W    CopCol0+16,CopList2+18
  15312.     BSR    SwapSamScreen
  15313.     BEQ    exisam2
  15314.     BSR    ClearSamScr
  15315.     JSR    DoShowFreeMem
  15316.     BSR    ShowSamNote
  15317.     BSR    ShowResamNote
  15318.     BRA    RedrawSample
  15319.  
  15320. ExitFromSam
  15321.     JSR    WaitForButtonUp
  15322.     MOVE.L    SamMemPtr,D0
  15323.     BEQ    exisam2
  15324.     MOVE.L    D0,A1
  15325.     BSR    Bjarne
  15326.     BSR.S    FreeDecompMem2
  15327. exisam2    JSR    SetDefSpritePtrs
  15328.     CLR.B    RawKeyCode
  15329.     CLR.W    SamScrEnable
  15330.     MOVEQ    #-1,D0
  15331.     MOVE.L    D0,MarkStartOfs
  15332.     MOVE.L    SaveEditMode(PC),EditMode
  15333.     BSR    SetScreenColors2
  15334.     JSR    SetupVUCols
  15335.     BSR    SetScrPatternPos
  15336.     BSR    ClearSamScr
  15337.     JSR    UpdateCursorPos
  15338.     JSR    SetTempo
  15339.     BRA    RedrawPattern
  15340.  
  15341. FreeDecompMem2
  15342.     MOVE.L    SamMemPtr,D0
  15343.     BEQ    Return2
  15344.     MOVE.L    D0,A1
  15345.     MOVE.L    SamMemSize,D0
  15346.     CLR.L    SamMemPtr
  15347.     MOVE.L    4.W,A6
  15348.     JSR    LVOFreeMem(A6)
  15349.     RTS
  15350.  
  15351. Decompact2
  15352.     MOVE.L    A0,CompPtr
  15353.     MOVE.L    D0,CompLen
  15354.     BSR.S    FreeDecompMem2
  15355.     MOVE.L    CompPtr(PC),A0
  15356.     MOVE.L    (A0),D0
  15357.     MOVE.L    D0,SamMemSize
  15358.     MOVEQ    #MEMF_PUBLIC,D1
  15359.     MOVE.L    4.W,A6
  15360.     JSR    LVOAllocMem(A6)
  15361.     MOVE.L    D0,SamMemPtr
  15362.     BEQ    OutOfMemErr
  15363.     MOVE.L    D0,A1
  15364.     MOVE.L    CompPtr(PC),A0
  15365.     MOVE.L    CompLen(PC),D0
  15366.     ADDQ.L    #4,A0
  15367.     SUBQ.L    #4,D0
  15368. dcmlop3    MOVE.B    (A0)+,D1
  15369.     CMP.B    #181,D1
  15370.     BEQ.S    DecodeIt3
  15371.     MOVE.B    D1,(A1)+
  15372. decom3    SUBQ.L    #1,D0
  15373.     CMP.L    #0,D0
  15374.     BGT.S    dcmlop3
  15375.     MOVE.L    SamMemPtr(PC),A1
  15376.     MOVEQ    #-1,D0
  15377.     RTS
  15378.  
  15379. DecodeIt3
  15380.     MOVEQ    #0,D1
  15381.     MOVE.B    (A0)+,D1
  15382.     MOVE.B    (A0)+,D2
  15383. dcdlop3    MOVE.B    D2,(A1)+
  15384.     DBRA    D1,dcdlop3
  15385.     SUBQ.L    #2,D0
  15386.     BRA.S    decom3
  15387.  
  15388. SwapSamScreen
  15389.     LEA    SampScreenData,A0
  15390.     MOVE.L    #SampScreenSize,D0
  15391.     BSR    Decompact2
  15392.     BEQ    Return2
  15393.  
  15394. bjasize=134*10
  15395. Bjarne    LEA    SamScrPos,A0
  15396.     MOVEQ    #1,D2
  15397. BjaLop1    MOVE.W    #bjasize-1,D1 ; 134
  15398. BjaLop2    MOVE.L    (A0),D0
  15399.     MOVE.L    (A1),(A0)+
  15400.     MOVE.L    D0,(A1)+
  15401.     DBRA    D1,BjaLop2
  15402.     ADD.L    #10240-bjasize*4,A0
  15403.     DBRA    D2,BjaLop1
  15404.  
  15405.     LEA    CopListInsPos,A0
  15406.     LEA    CopList2,A1
  15407.     MOVEQ    #29,D1
  15408. BjaLoop    MOVE.W    (A0),D0
  15409.     MOVE.W    (A1),(A0)+
  15410.     MOVE.W    D0,(A1)+
  15411.     DBRA    D1,BjaLoop
  15412.     MOVEQ    #-1,D0
  15413.     RTS
  15414.  
  15415. ClearSamScr
  15416.     MOVE.W    #5121,TextOffset
  15417.     MOVE.W    #2,TextLength
  15418.     MOVE.L    #blnktxt,ShowTextPtr
  15419.     BSR    ShowText
  15420.     MOVE.W    #4964,TextOffset
  15421.     MOVE.W    #3,TextLength
  15422.     BSR    ShowText
  15423.     MOVE.W    #130*10-1,D0
  15424.     MOVE.L    TextBplPtr,A0
  15425.     LEA    $15B8(A0),A0
  15426.     MOVE.L    A0,LineScreen
  15427.     MOVEQ    #0,D1
  15428. clrsslp    MOVE.L    D1,(A0)+
  15429.     DBRA    D0,clrsslp
  15430.     RTS
  15431.  
  15432. blnktxt    dc.b "    "
  15433.  
  15434. ClearSamArea
  15435.     MOVE.W    #64*10-1,D0
  15436.     MOVE.L    TextBplPtr,A0
  15437.     LEA    $15B8(A0),A0
  15438.     MOVE.L    A0,LineScreen
  15439.     MOVEQ    #0,D1
  15440. clrsare    MOVE.L    D1,(A0)+
  15441.     DBRA    D0,clrsare
  15442.     RTS
  15443.  
  15444. CheckSamGadgets
  15445.     MOVEM.W    MouseX2,D0/D1
  15446.     CMP.W    #139,D1
  15447.     BLO    SamTopBar
  15448.     CMP.W    #139+64,D1
  15449.     BLO    SamplePressed
  15450.     CMP.W    #201+11,D1
  15451.     BLO    SamDragBar
  15452.     CMP.W    #201+22,D1
  15453.     BLO    SamMenu1
  15454.     CMP.W    #201+33,D1
  15455.     BLO    SamMenu2
  15456.     CMP.W    #201+44,D1
  15457.     BLO    SamMenu3
  15458.     CMP.W    #201+66,D1
  15459.     BLO    SamMenu4
  15460.     RTS
  15461.  
  15462. SamTopBar
  15463.     CMP.W    #32,D0
  15464.     BLO    ExitFromSam
  15465.     RTS
  15466.  
  15467. SamMenu1
  15468.     CMP.W    #32,D0
  15469.     BLO    Return2
  15470.     CMP.W    #96,D0
  15471.     BLO    PlayWaveform
  15472.     CMP.W    #176,D0
  15473.     BLO    ShowRange
  15474.     CMP.W    #246,D0
  15475.     BLO    ZoomOut
  15476.     BRA    DispBox
  15477.  
  15478. SamMenu2
  15479.     CMP.W    #32,D0
  15480.     BLO    StopPlaying
  15481.     CMP.W    #96,D0
  15482.     BLO    PlayDisplay
  15483.     CMP.W    #176,D0
  15484.     BLO    ShowAll
  15485.     CMP.W    #246,D0
  15486.     BLO    RangeAll
  15487.     BRA    LoopToggle
  15488.  
  15489. SamMenu3
  15490.     CMP.W    #32,D0
  15491.     BLO    StopPlaying
  15492.     CMP.W    #96,D0
  15493.     BLO    PlayRange
  15494.     CMP.W    #116,D0
  15495.     BLO    CurToStart
  15496.     CMP.W    #136,D0
  15497.     BLO    CurToEnd
  15498.     CMP.W    #176,D0
  15499.     BLO    SwapBuffer
  15500.     CMP.W    #246,D0
  15501.     BLO    Sampler
  15502.     BRA    SetSamNote
  15503.  
  15504. SamMenu4
  15505.     CMP.W    #32,D0
  15506.     BLO    SamCut
  15507.     CMP.W    #64,D0
  15508.     BLO    SamCopy
  15509.     CMP.W    #96,D0
  15510.     BLO    SamPaste
  15511.     CMP.W    #136,D0
  15512.     BLO    RampVolume
  15513.     CMP.W    #176,D0
  15514.     BLO    TuningTone
  15515.     CMP.W    #246,D0
  15516.     BLO    Resample
  15517.     BRA    SetResamNote
  15518.  
  15519.  
  15520. PlayWaveform
  15521.     JSR    PlayNote
  15522.     JMP    WaitForButtonUp
  15523. PlayDisplay
  15524.     LEA    SampleInfo,A0
  15525.     MOVE.L    SamOffset(PC),StartOfs
  15526.     MOVE.L    SamDisplay(PC),D0
  15527.     LSR.L    #1,D0
  15528.     MOVE.W    D0,(A0)
  15529.     CLR.W    4(A0)
  15530.     MOVE.W    #1,6(A0)
  15531.     MOVE.W    PlayInsNum,-(SP)
  15532.     CLR.W    PlayInsNum
  15533.     JSR    PlayNote
  15534.     MOVE.W    (SP)+,PlayInsNum
  15535.     BSR    ShowSampleInfo
  15536.     JMP    WaitForButtonUp
  15537. PlayRange
  15538.     MOVE.L    MarkStartOfs(PC),D1
  15539.     BMI    NoRangeError
  15540.     MOVE.L    MarkEndOfs(PC),D0
  15541.     CMP.L    D0,D1
  15542.     BEQ    LargerRangeError
  15543.     LEA    SampleInfo,A0
  15544.     MOVE.L    D1,StartOfs
  15545.     SUB.L    D1,D0
  15546.     LSR.L    #1,D0
  15547.     MOVE.W    D0,(A0)
  15548.     CLR.W    4(A0)
  15549.     MOVE.W    #1,6(A0)
  15550.     MOVE.W    PlayInsNum,-(SP)
  15551.     CLR.W    PlayInsNum
  15552.     JSR    PlayNote
  15553.     MOVE.W    (SP)+,PlayInsNum
  15554.     BSR    ShowSampleInfo
  15555.     JMP    WaitForButtonUp
  15556. StopPlaying
  15557.     BRA    TurnOffVoices
  15558.  
  15559. StartOfs
  15560.     dc.l    0
  15561.  
  15562. ;----
  15563.  
  15564. ShowRange
  15565.     MOVE.L    MarkStartOfs(PC),D0
  15566.     BMI    NoRangeError
  15567.     MOVE.L    MarkEndOfs(PC),D1
  15568.     CMP.L    D1,D0
  15569.     BEQ    LargerRangeError
  15570.     SUB.L    D0,D1
  15571.     BNE    shorano
  15572.     MOVEQ    #1,D1
  15573. shorano    MOVE.L    D1,SamDisplay
  15574.     MOVE.L    D0,SamOffset
  15575.     MOVEQ    #-1,D0
  15576.     MOVE.L    D0,MarkStartOfs
  15577.     CLR.W    MarkStart
  15578.     BSR    DisplaySample
  15579.     JMP    WaitForButtonUp
  15580.  
  15581. ZoomOut    MOVE.L    SamDisplay(PC),D0
  15582.     MOVE.L    SamLength(PC),D1
  15583.     MOVE.L    SamOffset(PC),D2
  15584.     MOVE.L    D0,D3
  15585.     LSL.L    #1,D3
  15586.     CMP.L    D1,D3
  15587.     BHI    ShowAll
  15588.     LSR.L    #1,D0
  15589.     CMP.L    D2,D0
  15590.     BLO    zoomou2
  15591.     MOVEQ    #0,D0
  15592. zoomou2    SUB.L    D0,D2
  15593.     MOVE.L    D2,D0
  15594.     ADD.L    D3,D0
  15595.     CMP.L    D1,D0
  15596.     BLS    zoomou3
  15597.     SUB.L    D3,D1
  15598.     MOVE.L    D1,D2
  15599. zoomou3    MOVE.L    D2,SamOffset
  15600.     MOVE.L    D3,SamDisplay
  15601.     BSR    OffsetToMark
  15602.     MOVE.L    MarkStartOfs(PC),D0
  15603.     CMP.L    MarkEndOfs(PC),D0
  15604.     BNE    zoomouo
  15605.     MOVEQ    #-1,D0
  15606.     MOVE.L    D0,MarkStartOfs
  15607. zoomouo    BSR    DisplaySample
  15608.     JMP    WaitForButtonUp
  15609.  
  15610. ShowAll    CLR.L    SamOffset
  15611.     MOVE.L    SamLength(PC),SamDisplay
  15612.     BSR    OffsetToMark
  15613.     MOVE.L    MarkStartOfs(PC),D0
  15614.     CMP.L    MarkEndOfs(PC),D0
  15615.     BNE    shoallo
  15616.     MOVEQ    #-1,D0
  15617.     MOVE.L    D0,MarkStartOfs
  15618.     CLR.W    MarkStart
  15619. shoallo    BSR    DisplaySample
  15620.     JMP    WaitForButtonUp
  15621.  
  15622. RangeAll
  15623.     BSR    InvertRange
  15624.     MOVE.W    #3,MarkStart
  15625.     MOVE.W    #316,MarkEnd
  15626.     BSR    MarkToOffset
  15627. ranall2    BSR    InvertRange
  15628.     JMP    WaitForButtonUp
  15629.  
  15630.  
  15631. CurToStart
  15632.     BSR    InvertRange
  15633.     MOVEQ    #3,D0
  15634.     MOVE.W    D0,MarkStart
  15635.     MOVE.W    D0,MarkEnd
  15636.     MOVE.L    SamOffset(PC),D0
  15637.     MOVE.L    D0,MarkStartOfs
  15638.     MOVE.L    D0,MarkEndOfs
  15639.     BRA.S    ranall2
  15640.  
  15641. CurToEnd
  15642.     BSR    InvertRange
  15643.     MOVE.W    #316,D0
  15644.     MOVE.W    D0,MarkStart
  15645.     MOVE.W    D0,MarkEnd
  15646.     MOVE.L    SamOffset(PC),D0
  15647.     ADD.L    SamDisplay(PC),D0
  15648.     MOVE.L    D0,MarkStartOfs
  15649.     MOVE.L    D0,MarkEndOfs
  15650.     BRA.S    ranall2
  15651.  
  15652. SwapBuffer
  15653.     MOVE.W    InsNum(PC),D1
  15654.     BEQ    NotSampleNull
  15655.     LSL.W    #2,D1
  15656.     LEA    SamplePtrs,A0
  15657.     LEA    (A0,D1.W),A0
  15658.  
  15659.     MOVE.L    CopyBufPtr(PC),D0
  15660.     MOVE.L    (A0),CopyBufPtr
  15661.     MOVE.L    D0,(A0)
  15662.     MOVE.L    D0,A1
  15663.     CLR.W    (A1)
  15664.  
  15665.     MOVE.L    CopyBufSize(PC),D0
  15666.     MOVE.L    124(A0),CopyBufSize
  15667.     MOVE.L    D0,124(A0)
  15668.  
  15669.     MOVE.L    SongDataPtr(PC),A0
  15670.     MOVE.W    InsNum(PC),D1
  15671.     MULU    #30,D1
  15672.     LEA    12(A0,D1.W),A0
  15673.     LSR.L    #1,D0
  15674.     MOVE.W    D0,(A0)
  15675.     MOVE.L    RepBuf(PC),D0
  15676.     MOVE.L    4(A0),RepBuf
  15677.     MOVE.L    D0,4(A0)
  15678.  
  15679.     MOVE.W    RepBuf2(PC),D0
  15680.     MOVE.W    2(A0),RepBuf2
  15681.     TST.B    D0
  15682.     BNE.S    swabuf2
  15683.     MOVE.B    #$40,D0
  15684. swabuf2    MOVE.W    D0,2(A0)
  15685.     JSR    TurnOffVoices
  15686.     BSR    ValidateLoops
  15687.     BSR    ShowSampleInfo
  15688.     BSR    UpdateRepeats
  15689.     BSR    RedrawSample
  15690.     JMP    WaitForButtonUp
  15691.  
  15692. RepBuf    dc.l    1
  15693. RepBuf2    dc.w    $0040
  15694.  
  15695. ;----
  15696.  
  15697. NoRangeError
  15698.     LEA    NoRangeText(PC),A0
  15699. nres2    BSR    ShowStatusText
  15700.     JMP    SetErrorPtrCol
  15701.  
  15702. LargerRangeError
  15703.     LEA    LargerRangeText(PC),A0
  15704.     BRA.S    nres2
  15705.  
  15706. SetCursorError
  15707.     LEA    SetCursorText(PC),A0
  15708.     BRA.S    nres2
  15709.  
  15710. BufIsEmptyError
  15711.     LEA    BufIsEmptyText(PC),A0
  15712.     BRA.S    nres2
  15713.  
  15714. EmptySampleError
  15715.     LEA    EmptySampleText(PC),A0
  15716.     BRA.S    nres2
  15717.  
  15718. NoRangeText    dc.b "no range selected",0
  15719. LargerRangeText    dc.b "set larger range",0
  15720. SetCursorText    dc.b "set cursor pos",0
  15721. BufIsEmptyText    dc.b "buffer is empty",0
  15722. EmptySampleText    dc.b "sample is empty",0
  15723.  
  15724. ;----
  15725.  
  15726. DispBox
  15727.     RTS
  15728.  
  15729. LoopToggle
  15730.     JSR    WaitForButtonUp
  15731.     MOVE.W    InsNum(PC),D1
  15732.     BEQ    NotSampleNull
  15733.     MOVE.L    SongDataPtr(PC),A0
  15734.     MULU    #30,D1
  15735.     LEA    12(A0,D1.W),A0
  15736.     TST.W    LoopOnOffFlag
  15737.     BEQ.S    loopton
  15738.     MOVE.L    4(A0),SavSamInf    
  15739.     MOVEQ    #1,D0
  15740.     MOVE.L    D0,4(A0)
  15741.     JSR    TurnOffVoices
  15742. looptlo    BSR    ShowSampleInfo
  15743.     BSR    UpdateRepeats
  15744.     BRA    DisplaySample
  15745. loopton    MOVE.L    SavSamInf(PC),D0
  15746.     BNE.S    loopto2
  15747.     MOVE.W    (A0),D0
  15748. loopto2    MOVE.L    D0,4(A0)
  15749.     BRA    looptlo
  15750.  
  15751. ShowLoopToggle
  15752.     LEA    ToggleOFFText(PC),A0
  15753.     TST.W    LoopOnOffFlag
  15754.     BEQ.S    sltskip
  15755.     LEA    ToggleONText(PC),A0
  15756. sltskip    MOVEQ    #3,D0
  15757.     MOVE.W    #9076,D1
  15758.     BRA    ShowText3
  15759.  
  15760. LoopOnOffFlag    dc.w 0
  15761. SavSamInf    dc.l 0
  15762.  
  15763. SetSamNote
  15764.     BSR    ShowResamNote
  15765.     MOVE.W    #9516,TextOffset
  15766.     MOVE.W    #3,TextLength
  15767.     MOVE.L    #SpcNoteText,ShowTextPtr
  15768.     BSR    ShowText
  15769.     MOVE.W    #1,SamNoteType
  15770.     MOVE.L    #SampleNote,SplitAddress
  15771.     JMP    WaitForButtonUp
  15772.  
  15773. SetResamNote
  15774.     BSR    ShowSamNote
  15775.     MOVE.W    #9956,TextOffset
  15776.     MOVE.W    #3,TextLength
  15777.     MOVE.L    #SpcNoteText,ShowTextPtr
  15778.     BSR    ShowText
  15779.     MOVE.W    #2,SamNoteType
  15780.     MOVE.L    #ResampleNote,SplitAddress
  15781.     JMP    WaitForButtonUp
  15782.  
  15783. ResampleText    dc.b "Resample?",0
  15784. ResamplingText    dc.b "Resampling...",0
  15785.  
  15786. Resample
  15787.     LEA    ResampleText(PC),A0
  15788.     JSR    AreYouSure
  15789.     BNE    Return2
  15790.     JSR    StorePtrCol
  15791.     JSR    SetWaitPtrCol
  15792.     LEA    ResamplingText(PC),A0
  15793.     BSR    ShowStatusText
  15794.     LEA    SamplePtrs,A0
  15795.     MOVE.W    InsNum(PC),D1
  15796.     BEQ    NotSampleNull
  15797.     LSL.W    #2,D1
  15798.     LEA    (A0,D1.W),A0
  15799.     MOVE.L    (A0),D0
  15800.     BEQ    ERC2
  15801.     MOVE.L    D0,A2
  15802.     MOVE.L    124(A0),D6
  15803.     CMP.L    #2,D6
  15804.     BLS    ERC2
  15805.  
  15806.     MOVE.L    SongDataPtr(PC),A0
  15807.     MOVE.W    InsNum(PC),D1
  15808.     MULU    #30,D1
  15809.     MOVEQ    #0,D0
  15810.     MOVE.B    12+2(A0,D1.W),D0 ; finetune
  15811.     MULU    #37*2,D0
  15812.     LEA    PeriodTable(PC),A0
  15813.     ADD.L    D0,A0
  15814.     MOVEQ    #0,D1
  15815.     MOVE.W    ResampleNote(PC),D1
  15816.     LSL.W    #1,D1
  15817.     MOVE.W    (A0,D1.W),D1
  15818.     BEQ    ERC2
  15819.  
  15820.     LEA    PeriodTable,A0
  15821.     MOVEQ    #0,D5
  15822.     MOVE.W    TuneNote,D5
  15823.     LSL.W    #1,D5
  15824.     MOVE.W    (A0,D5.W),D5
  15825.     BEQ    ERC2
  15826.  
  15827. ; D1=resamperiod, D5=tuneperiod
  15828.  
  15829.     MOVE.L    D5,D0 ; tune
  15830.     LSL.L    #8,D0
  15831.     LSL.L    #4,D0 ; * 4096
  15832.     DIVU    D1,D0 ; / resample
  15833.     MOVEQ    #0,D4
  15834.     MOVE.W    D0,D4
  15835.     LSL.L    #4,D4 ; hi-word=add value, lo-word=fraction
  15836.  
  15837.     MOVE.W    D6,D7
  15838.     LSR.W    #1,D7
  15839.     MULU    D1,D7
  15840.     DIVU    D5,D7
  15841.     AND.L    #$FFFF,D7
  15842.     CMP.W    #2,D7
  15843.     BLO    ERC2
  15844.     CMP.W    #$7FFF,D7
  15845.     BLO    resamlo
  15846.     MOVE.W    #$7FFF,D7
  15847. resamlo    ADD.L    D7,D7
  15848.     MOVE.L    D7,D0
  15849.     MOVE.L    #MEMF_CHIP!MEMF_CLEAR,D1
  15850.     MOVE.L    4.W,A6
  15851.     JSR    LVOAllocMem(A6)
  15852.     TST.L    D0
  15853.     BEQ    SamMemError
  15854.     MOVE.L    D0,A1
  15855.     MOVE.L    D0,A3
  15856.     JSR    TurnOffVoices
  15857.     MOVE.L    A2,A0
  15858. ; D4=resample value, D6=old length, D7=new length
  15859. ; A0/A2=old sample, A1/A3=new sample
  15860.  
  15861.     MOVE.W    #32767,D1
  15862.     MOVEQ    #0,D3
  15863.     MOVEQ    #0,D5
  15864. resampleloop
  15865.     MOVE.B    1(A0),D0
  15866.     EXT.W    D0
  15867.     MULS    D1,D0
  15868.     MOVE.B    (A0),D2
  15869.     EXT.W    D2
  15870.     MULS    D3,D2
  15871.     ADD.L    D2,D0
  15872.     ASR.L    #8,D0
  15873.     ASR.L    #7,D0
  15874.     MOVE.B    D0,(A1)+
  15875.  
  15876.     ADD.L    D4,D5
  15877.     SWAP    D5
  15878.     MOVE.L    A2,A0
  15879.     MOVEQ    #0,D0
  15880.     MOVE.W    D5,D0
  15881.     ADD.L    D0,A0
  15882.     SWAP    D5
  15883.     MOVE.W    D5,D1
  15884.     LSR.W    #1,D1
  15885.     MOVE.W    #32767,D3
  15886.     SUB.W    D1,D3
  15887.  
  15888.     MOVE.L    A1,A4
  15889.     SUB.L    A3,A4
  15890.     CMP.L    D7,A4
  15891.     BHS.S    resamskip
  15892.     MOVE.L    A0,A4
  15893.     SUB.L    A2,A4
  15894.     CMP.L    D6,A4
  15895.     BLO.S    resampleloop
  15896.  
  15897. resamskip
  15898.     MOVE.L    A2,A1
  15899.     MOVE.L    D6,D0
  15900.     MOVE.L    4.W,A6
  15901.     JSR    LVOFreeMem(A6)
  15902.     MOVE.W    InsNum(PC),D1
  15903.     LSL.W    #2,D1
  15904.     LEA    SamplePtrs,A0
  15905.     LEA    (A0,D1.W),A0
  15906.     MOVE.L    A3,(A0)
  15907.     MOVE.L    D7,124(A0)
  15908.  
  15909.     MOVE.L    SongDataPtr(PC),A0
  15910.     MOVE.W    InsNum(PC),D1
  15911.     MULU    #30,D1
  15912.     LEA    12(A0,D1.W),A0
  15913.     LSR.L    #1,D7
  15914.     MOVE.W    D7,(A0)
  15915.     CLR.B    2(A0)
  15916.     CLR.W    4(A0)
  15917.     MOVE.W    #1,6(A0)
  15918.     JSR    RestorePtrCol
  15919.     BSR    ClearSamStarts
  15920.     BSR    ShowSampleInfo
  15921.     BSR    ShowAllRight
  15922.     BRA    RedrawSample
  15923.  
  15924. ERC2    JMP    ErrorRestoreCol
  15925.  
  15926. SamCut    CLR.B    RawKeyCode
  15927.     MOVE.L    MarkStartOfs(PC),D0
  15928.     BMI    NoRangeError
  15929.     CMP.L    MarkEndOfs(PC),D0
  15930.     BEQ    LargerRangeError
  15931.     TST.B    CutToBufFlag
  15932.     BEQ.S    samcut2
  15933.     BSR    SamCopy
  15934. samcut2    BSR    TurnOffVoices
  15935.     LEA    SamplePtrs(PC),A0
  15936.     MOVE.W    InsNum(PC),D1
  15937.     BEQ    NotSampleNull
  15938.     LSL.W    #2,D1
  15939.     LEA    (A0,D1.W),A0
  15940.     MOVE.L    (A0),D0
  15941.     BEQ    EmptySampleError
  15942.     MOVE.L    124(A0),D2
  15943.     CMP.L    #2,D2
  15944.     BLO    EmptySampleError
  15945.  
  15946.     MOVE.L    D0,A1
  15947.     MOVE.L    D0,A2        ; sample start
  15948.     MOVE.L    D0,A3
  15949.     MOVE.L    D0,A4
  15950.     MOVE.L    D0,A5
  15951.     ADD.L    MarkStartOfs(PC),A3    ; mark start
  15952.     MOVE.L    MarkEndOfs(PC),D0
  15953.     SUB.L    MarkStartOfs(PC),D0
  15954.     CMP.L    D2,D0
  15955.     BHS    Destroy
  15956.     MOVE.L    MarkEndOfs(PC),D0
  15957.     CMP.L    D2,D0
  15958.     BLO.S    samsome
  15959.     MOVE.L    D2,D0
  15960.     SUBQ.L    #1,D0
  15961. samsome    ADD.L    D0,A4    ; mark end
  15962.     ADD.L    D2,A5        ; sample end
  15963.  
  15964.     MOVE.L    A3,D0
  15965.     SUB.L    A2,D0
  15966.     ADD.L    A5,D0
  15967.     SUB.L    A4,D0
  15968.     BNE    sacoklen
  15969.     MOVEQ    #0,D3
  15970.     MOVEQ    #0,D4
  15971.     BRA    sacfree
  15972.  
  15973. sacoklen
  15974.     MOVE.L    D0,D3
  15975.     MOVEQ    #MEMF_CHIP,D1
  15976.     MOVE.L    4.W,A6
  15977.     JSR    LVOAllocMem(A6)
  15978.     MOVE.L    D0,D4
  15979.     BEQ    OutOfMemErr ; No memory
  15980.  
  15981.     MOVE.L    D0,A0
  15982.     MOVE.L    A2,A1
  15983.     MOVE.L    A3,D0
  15984.     SUB.L    A2,D0
  15985.     BRA.S    sacskp1
  15986. saclop1    MOVE.B    (A2)+,(A0)+
  15987. sacskp1    DBRA    D0,saclop1
  15988.  
  15989.     MOVE.L    A5,D0
  15990.     SUB.L    A4,D0
  15991.     BRA.S    sacskp2
  15992. smclop2    MOVE.B    (A4)+,(A0)+
  15993. sacskp2    DBRA    D0,smclop2
  15994.  
  15995. sacfree    MOVE.L    D2,D0
  15996.     MOVE.L    4.W,A6
  15997.     JSR    LVOFreeMem(A6)
  15998.  
  15999.     MOVE.W    InsNum(PC),D1
  16000.     LSL.W    #2,D1
  16001.     LEA    SamplePtrs(PC),A0
  16002.     LEA    (A0,D1.W),A0
  16003.     MOVE.L    D4,(A0)
  16004.     MOVE.L    D3,124(A0)
  16005.  
  16006.     MOVE.L    D4,SamStart
  16007.     MOVE.L    D3,SamLength
  16008.     MOVE.L    SamOffset(PC),D4
  16009.     ADD.L    SamDisplay(PC),D4
  16010.     CMP.L    D3,D4
  16011.     BLO    samcuto        ; display ok
  16012.     MOVE.L    SamDisplay(PC),D4
  16013.     CMP.L    D3,D4
  16014.     BLO    samnils        ; if display < length, move offset
  16015. samsall    CLR.L    SamOffset    ; else show all
  16016.     MOVE.L    D3,SamDisplay
  16017.     BRA    samcuto
  16018. samnils    MOVE.L    D3,D4
  16019.     SUB.L    SamDisplay(PC),D4
  16020.     BMI.S    samsall        ; if offset < 0, show all
  16021.     MOVE.L    D4,SamOffset
  16022. samcuto    MOVE.L    SongDataPtr(PC),A0
  16023.     MOVE.W    InsNum(PC),D1
  16024.     MULU    #30,D1
  16025.     LEA    12(A0,D1.W),A0
  16026.  
  16027.     LSR.L    #1,D3
  16028.     MOVE.W    D3,(A0)
  16029.     MOVE.W    4(A0),D0
  16030.     CMP.W    D3,D0
  16031.     BLS.S    samcuxx    
  16032.     MOVEQ    #1,D0
  16033.     MOVE.L    D0,4(A0)
  16034.     BRA.S    samcuex
  16035. samcuxx    ADD.W    6(A0),D0
  16036.     CMP.W    D3,D0
  16037.     BLS.S    samcuex
  16038.     SUB.W    4(A0),D3
  16039.     MOVE.W    D3,6(A0)
  16040.  
  16041. samcuex    MOVE.L    MarkStartOfs(PC),MarkEndOfs
  16042.     BSR    ClearSamStarts
  16043.     BSR    ValidateLoops
  16044.     BSR    ShowSampleInfo
  16045.     BRA    DisplaySample
  16046.  
  16047.  
  16048. SamCopy    CLR.B    RawKeyCode
  16049.     MOVE.L    MarkStartOfs(PC),D0
  16050.     BMI    NoRangeError
  16051.     CMP.L    MarkEndOfs(PC),D0
  16052.     BEQ    LargerRangeError
  16053.     LEA    SamplePtrs(PC),A0
  16054.     MOVE.W    InsNum(PC),D1
  16055.     BEQ    NotSampleNull
  16056.     LSL.W    #2,D1
  16057.     LEA    (A0,D1.W),A0
  16058.     MOVE.L    (A0),D0
  16059.     BEQ    EmptySampleError
  16060.     MOVE.L    124(A0),D2
  16061.     BEQ    EmptySampleError
  16062.     MOVE.L    D0,A3
  16063.     MOVE.L    D0,A4
  16064.     ADD.L    MarkStartOfs(PC),A3    ; mark start
  16065.     MOVE.L    MarkEndOfs(PC),D0    ; mark end
  16066.     CMP.L    D2,D0
  16067.     BLO.S    csamsom
  16068.     MOVE.L    D2,D0
  16069.     SUBQ.L    #1,D0
  16070. csamsom    ADD.L    D0,A4
  16071.     BSR.S    FreeCopyBuf
  16072.     MOVE.L    A4,D0
  16073.     SUB.L    A3,D0
  16074.     ADDQ.L    #1,D0
  16075.     MOVE.L    D0,CopyBufSize
  16076.     MOVEQ    #MEMF_CHIP,D1
  16077.     MOVE.L    4.W,A6
  16078.     JSR    LVOAllocMem(A6)
  16079.     MOVE.L    D0,CopyBufPtr
  16080.     BEQ    OutOfMemErr ; No memory
  16081.     MOVE.L    D0,A5
  16082. csamlop    MOVE.B    (A3)+,(A5)+
  16083.     CMP.L    A4,A3
  16084.     BLS.S    csamlop
  16085.     BSR    InvertRange
  16086.     BSR    InvertRange
  16087.     JMP    WaitForButtonUp
  16088.  
  16089. FreeCopyBuf
  16090.     MOVE.L    CopyBufPtr(PC),D0
  16091.     BEQ    Return2
  16092.     MOVE.L    D0,A1
  16093.     MOVE.L    CopyBufSize(PC),D0
  16094.     MOVE.L    4.W,A6
  16095.     JSR    LVOFreeMem(A6)
  16096.     CLR.L    CopyBufPtr
  16097.     RTS
  16098.  
  16099. CopyBufPtr    dc.l    0
  16100. CopyBufSize    dc.l    0
  16101.  
  16102. SamPaste
  16103.     CLR.B    RawKeyCode
  16104.     MOVE.L    MarkStartOfs(PC),D0
  16105.     BMI    SetCursorError
  16106.     LEA    SamplePtrs(PC),A0
  16107.     MOVE.W    InsNum(PC),D1
  16108.     BEQ    NotSampleNull
  16109.     LSL.W    #2,D1
  16110.     LEA    (A0,D1.W),A0
  16111.     MOVEQ    #0,D2
  16112.     MOVE.L    (A0),D0
  16113.     BEQ.S    sapanul
  16114.     MOVE.L    124(A0),D2
  16115. sapanul    MOVE.L    D0,A2
  16116.     MOVE.L    CopyBufPtr(PC),D3
  16117.     BEQ    BufIsEmptyError
  16118.     MOVE.L    D3,A3
  16119.     MOVE.L    CopyBufSize(PC),D3
  16120.     BEQ    BufIsEmptyError
  16121.  
  16122.     MOVE.L    D3,D4 ; copysize
  16123.     ADD.L    D2,D4 ; + origsize
  16124.     CMP.L    #$FFFE,D4
  16125.     BLO.S    sapaok
  16126.     MOVE.L    #$FFFE,D4
  16127. sapaok    MOVE.L    D4,D0
  16128.     MOVE.L    #MEMF_CHIP!MEMF_CLEAR,D1
  16129.     MOVE.L    4.W,A6
  16130.     JSR    LVOAllocMem(A6)
  16131.     TST.L    D0
  16132.     BEQ    OutOfMemErr
  16133.     MOVE.L    D0,A4
  16134.     MOVEQ    #0,D0
  16135.     TST.L    D2
  16136.     BEQ.S    sapask1
  16137.     MOVE.L    MarkStartOfs(PC),D0
  16138. sapask1    MOVE.L    D0,MarkStartOfs
  16139.     MOVE.L    A2,A1
  16140.     MOVE.L    D2,D1
  16141.     MOVE.L    A4,A5
  16142.     MOVE.L    A4,A0
  16143.     ADD.L    D4,A0
  16144. ; D0    = paste position
  16145. ; A0    = end of new sample
  16146. ; A1/D1 = copy of A2/D2
  16147. ; A2/D2 = original sample
  16148. ; A3/D3 = copy buffer
  16149. ; A4/D4 = new sample
  16150. ; A5    = copy of A4
  16151.     BRA.S    sapask2
  16152. sapalp1    MOVE.B    (A2)+,(A4)+ ; copy first part
  16153.     CMP.L    A0,A4
  16154.     BHS.S    sapaski
  16155.     SUBQ.L    #1,D2
  16156. sapask2    DBRA    D0,sapalp1
  16157.     BRA.S    sapask3
  16158. sapalp2    MOVE.B    (A3)+,(A4)+ ; copy from buffer
  16159.     CMP.L    A0,A4
  16160.     BHS.S    sapaski
  16161. sapask3    DBRA    D3,sapalp2
  16162.     TST.L    D2
  16163.     BEQ.S    sapaski
  16164.     BMI.S    sapaski
  16165. sapalp3    MOVE.B    (A2)+,(A4)+ ; copy last part
  16166.     CMP.L    A0,A4
  16167.     BHS.S    sapaski
  16168.     SUBQ.L    #1,D2
  16169.     BNE.S    sapalp3
  16170.  
  16171. sapaski    MOVE.L    D1,D0
  16172.     MOVE.L    4.W,A6
  16173.     JSR    LVOFreeMem(A6)
  16174.  
  16175.     MOVE.W    InsNum(PC),D1
  16176.     LSL.W    #2,D1
  16177.     LEA    SamplePtrs(PC),A0
  16178.     LEA    (A0,D1.W),A0
  16179.     MOVE.L    A5,(A0)
  16180.     MOVE.L    D4,124(A0)
  16181.  
  16182.     MOVE.L    SongDataPtr(PC),A0
  16183.     MOVE.W    InsNum(PC),D1
  16184.     MULU    #30,D1
  16185.     LEA    12(A0,D1.W),A0
  16186.     LSR.L    #1,D4
  16187.     MOVE.W    D4,(A0)
  16188.  
  16189.     MOVE.L    MarkStartOfs(PC),MarkEndOfs
  16190.     BSR    OffsetToMark
  16191.     BSR    ClearSamStarts
  16192.     BSR    ShowSampleInfo
  16193.     BRA    RedrawSample
  16194.  
  16195. RampVolume
  16196.     MOVE.L    TextBplPtr(PC),A0
  16197.     LEA    6209(A0),A0
  16198.     MOVEQ    #32,D3
  16199. ravlap2    MOVEQ    #16,D2
  16200. ravlap1    CLR.B    (A0)+
  16201.     DBRA    D2,ravlap1
  16202.     LEA    23(A0),A0
  16203.     DBRA    D3,ravlap2
  16204.     LEA    VolBoxPos,A0
  16205.     LEA    VolBoxData,A1
  16206.     MOVEQ    #1,D4
  16207. ravlop3    MOVEQ    #32,D3
  16208. ravlop2    MOVEQ    #16,D2
  16209. ravlop1    MOVE.B    (A1)+,(A0)+
  16210.     DBRA    D2,ravlop1
  16211.     ADDQ.L    #1,A1
  16212.     LEA    23(A0),A0
  16213.     DBRA    D3,ravlop2
  16214.     LEA    8920(A0),A0
  16215.     DBRA    D4,ravlop3
  16216.     BSR    ShowVolSliders
  16217.     JSR    WaitForButtonUp
  16218. ravloop    BTST    #2,$DFF016
  16219.     BEQ.S    ExitVolBox
  16220.     JSR    DoKeyBuffer
  16221.     MOVE.B    RawKeyCode(PC),D2
  16222.     CMP.B    #68,D2
  16223.     BEQ.S    ExitVolBox
  16224.     BTST    #6,$BFE001
  16225.     BNE.S    ravloop
  16226.     MOVEM.W    MouseX,D0-D1
  16227.     CMP.W    #72,D0
  16228.     BLO.S    ravloop
  16229.     CMP.W    #72+136,D0
  16230.     BHS.S    ravloop
  16231.     CMP.W    #155,D1
  16232.     BLO.S    ravloop
  16233.     CMP.W    #166,D1
  16234.     BLO.S    Vol1Slider
  16235.     CMP.W    #177,D1
  16236.     BLO    Vol2Slider
  16237.     CMP.W    #188,D1
  16238.     BLO    VolGadgs
  16239.     BRA.S    ravloop
  16240.  
  16241. ExitVolBox
  16242.     LEA    VolBoxPos,A0
  16243.     MOVEQ    #1,D2
  16244. revlap3    MOVEQ    #32,D1
  16245. revlap2    MOVEQ    #16,D0
  16246. revlap1    CLR.B    (A0)+
  16247.     DBRA    D0,revlap1
  16248.     LEA    23(A0),A0
  16249.     DBRA    D1,revlap2
  16250.     LEA    8920(A0),A0
  16251.     DBRA    D2,revlap3
  16252.     BRA    DisplaySample
  16253.  
  16254. Vol1Slider
  16255.     CMP.W    #167,D0
  16256.     BHI.S    v1skip
  16257.     LEA    Vol1(PC),A4
  16258.     MOVEQ    #0,D7
  16259. v1loop1    BTST    #6,$BFE001
  16260.     BNE    ravloop
  16261.     MOVE.W    MouseX(PC),D0
  16262.     CMP.W    D7,D0
  16263.     BEQ.S    v1loop1
  16264.     MOVE.W    D0,D7
  16265.     SUB.W    #107,D0
  16266.     BPL.S    v1skp2
  16267.     MOVEQ    #0,D0
  16268. v1skp2    CMP.W    #60,D0
  16269.     BLS.S    v1skp3
  16270.     MOVEQ    #60,D0
  16271. v1skp3    MULU    #200,D0
  16272.     DIVU    #60,D0
  16273.     MOVE.W    D0,(A4)
  16274. shvosl    BSR    ShowVolSliders
  16275.     BRA.S    v1loop1
  16276.  
  16277. v1skip    MOVE.W    #180,LineCurX
  16278.     MOVE.W    #164,LineCurY
  16279.     MOVE.W    #6342,TextOffset
  16280.     BSR    GetDec3Dig
  16281.     TST.W    AbortDecFlag
  16282.     BNE    shvosl
  16283.     CMP.W    #200,D0
  16284.     BLS.S    v1sk2
  16285.     MOVE.W    #200,D0
  16286. v1sk2    MOVE.W    D0,Vol1
  16287.     BRA.S    shvosl
  16288.  
  16289. Vol2Slider
  16290.     CMP.W    #167,D0
  16291.     BHI.S    v2skip
  16292.     LEA    Vol2(PC),A4
  16293.     MOVEQ    #0,D7
  16294.     BRA    v1loop1
  16295. v2skip    MOVE.W    #180,LineCurX
  16296.     MOVE.W    #175,LineCurY
  16297.     MOVE.W    #6782,TextOffset
  16298.     BSR    GetDec3Dig
  16299.     TST.W    AbortDecFlag
  16300.     BNE    shvosl
  16301.     CMP.W    #200,D0
  16302.     BLS.S    v2sk2
  16303.     MOVE.W    #200,D0
  16304. v2sk2    MOVE.W    D0,Vol2
  16305.     BRA    shvosl
  16306.  
  16307.  
  16308. VolGadgs
  16309.     CMP.W    #100,D0
  16310.     BLO    DoRampVol
  16311.     CMP.W    #144,D0
  16312.     BLO    Normalize
  16313.     CMP.W    #154,D0
  16314.     BLO.S    SetRampDown
  16315.     CMP.W    #164,D0
  16316.     BLO.S    SetRampUp
  16317.     CMP.W    #174,D0
  16318.     BLO.S    SetRampUnity
  16319.     BRA    ExitVolBox
  16320.  
  16321. SetRampDown
  16322.     MOVE.W    #100,Vol1
  16323.     CLR.W    Vol2
  16324.     BRA.S    sru2
  16325. SetRampUp
  16326.     CLR.W    Vol1
  16327.     MOVE.W    #100,Vol2
  16328.     BRA.S    sru2
  16329. SetRampUnity
  16330.     MOVE.W    #100,Vol1
  16331.     MOVE.W    #100,Vol2
  16332. sru2    BSR.S    ShowVolSliders
  16333.     JSR    WaitForButtonUp
  16334.     BRA    ravloop
  16335.  
  16336. ShowVolSliders
  16337.     MOVE.L    TextBplPtr(PC),A0
  16338.     LEA    6209(A0),A0
  16339.     MOVEQ    #21,D3
  16340. ravlip2    MOVEQ    #12,D2
  16341. ravlip1    CLR.B    (A0)+
  16342.     DBRA    D2,ravlip1
  16343.     LEA    27(A0),A0
  16344.     DBRA    D3,ravlip2
  16345.     MOVEQ    #0,D4
  16346.     MOVE.W    Vol1(PC),D4
  16347.     MOVEQ    #20,D5
  16348.     BSR    OneSlider
  16349.     MOVEQ    #0,D4
  16350.     MOVE.W    Vol2(PC),D4
  16351.     MOVEQ    #31,D5
  16352.     BSR    OneSlider
  16353.     MOVE.W    Vol1(PC),WordNumber
  16354.     MOVE.W    #6342,TextOffset
  16355.     BSR    Print3DecDigits
  16356.     MOVE.W    Vol2(PC),WordNumber
  16357.     MOVE.W    #6782,TextOffset
  16358.     BRA    Print3DecDigits
  16359.  
  16360. OneSlider
  16361.     MOVE.W    D4,D6
  16362.     ADD.W    D4,D4
  16363.     ADD.W    D6,D4
  16364.     DIVU    #10,D4
  16365.     ADD.W    #105,D4
  16366.     MOVEQ    #2,D6
  16367. oneslop    MOVE.W    D4,D0
  16368.     MOVE.W    D4,D2
  16369.     ADDQ.W    #5,D2
  16370.     MOVE.W    D5,D1
  16371.     MOVE.W    D5,D3
  16372.     BSR    DrawLine
  16373.     ADDQ.W    #1,D5
  16374.     DBRA    D6,oneslop
  16375.     RTS
  16376.  
  16377. DoRampVol
  16378.     CLR.B    RawKeyCode
  16379.     LEA    SamplePtrs(PC),A0
  16380.     MOVE.W    InsNum(PC),D1
  16381.     BEQ    nozerr1
  16382.     LSL.W    #2,D1
  16383.     LEA    (A0,D1.W),A0
  16384.     MOVEQ    #0,D2
  16385.     MOVE.L    (A0),D0
  16386.     BEQ    nozerr2
  16387.     MOVE.L    D0,A2
  16388.     MOVE.L    124(A0),D2
  16389.     BEQ    nozerr2
  16390.     MOVE.L    MarkStartOfs(PC),D0
  16391.     BMI    drvskip
  16392.     MOVE.L    MarkEndOfs(PC),D1
  16393.     SUB.L    D0,D1
  16394.     BEQ.S    drvskip
  16395.     ADD.L    D0,A2
  16396.     MOVE.L    D1,D2
  16397.     ADDQ.L    #1,D2
  16398. drvskip    JSR    StorePtrCol
  16399.     JSR    SetWaitPtrCol
  16400.     MOVE.L    D2,D5
  16401.     MOVEQ    #0,D3
  16402. drvloop    MOVE.W    D3,D1
  16403.     MULU    Vol2(PC),D1
  16404.     DIVU    D2,D1
  16405.     MOVE.W    D2,D4
  16406.     SUB.W    D3,D4
  16407.     MULU    Vol1(PC),D4
  16408.     DIVU    D2,D4
  16409.     ADD.W    D4,D1
  16410.     ADDQ.W    #1,D3
  16411.     MOVE.B    (A2),D0
  16412.     EXT.W    D0
  16413.     MULS    D1,D0
  16414.     DIVS    #100,D0
  16415.     CMP.W    #127,D0
  16416.     BLT.S    drvskp2
  16417.     MOVEQ    #127,D0
  16418. drvskp2    CMP.W    #-128,D0
  16419.     BGT.S    drvskp3
  16420.     MOVEQ    #-128,D0
  16421. drvskp3    MOVE.B    D0,(A2)+
  16422.     SUBQ.L    #1,D5
  16423.     BNE    drvloop
  16424.     JSR    RestorePtrCol
  16425.     BRA    ExitVolBox
  16426.  
  16427. nozerr1    BSR    NotSampleNull
  16428.     BRA    ravloop
  16429. nozerr2    BSR    EmptySampleError
  16430.     BRA    ravloop
  16431.  
  16432. Normalize
  16433.     CLR.B    RawKeyCode
  16434.     LEA    SamplePtrs(PC),A0
  16435.     MOVE.W    InsNum(PC),D1
  16436.     BEQ    nozerr1
  16437.     LSL.W    #2,D1
  16438.     LEA    (A0,D1.W),A0
  16439.     MOVEQ    #0,D2
  16440.     MOVE.L    (A0),D0
  16441.     BEQ    nozerr2
  16442.     MOVE.L    D0,A2
  16443.     MOVE.L    124(A0),D2
  16444.     BEQ    nozerr2
  16445.     MOVE.L    MarkStartOfs(PC),D0
  16446.     BMI    nozskip
  16447.     MOVE.L    MarkEndOfs(PC),D1
  16448.     SUB.L    D0,D1
  16449.     BEQ.S    nozskip
  16450.     ADD.L    D0,A2
  16451.     MOVE.L    D1,D2
  16452.     ADDQ.L    #1,D2
  16453. nozskip    JSR    StorePtrCol
  16454.     JSR    SetWaitPtrCol
  16455.     MOVEQ    #0,D0
  16456. nozloop    MOVE.B    (A2)+,D1
  16457.     EXT.W    D1
  16458.     BPL.S    nozskp2
  16459.     NEG.W    D1
  16460. nozskp2    CMP.W    D0,D1
  16461.     BLO.S    nozskp3
  16462.     MOVE.W    D1,D0
  16463. nozskp3    SUBQ.L    #1,D2
  16464.     BNE    nozloop
  16465.     JSR    RestorePtrCol
  16466.     TST.W    D0
  16467.     BEQ    SetRampUnity
  16468.     CMP.W    #127,D0
  16469.     BHI    SetRampUnity
  16470.     CMP.W    #64,D0
  16471.     BLO.S    nozmax
  16472.     MOVE.L    #12700,D1
  16473.     DIVU    D0,D1
  16474.     MOVE.W    D1,Vol1
  16475.     MOVE.W    D1,Vol2
  16476.     BRA    sru2
  16477. nozmax    MOVE.W    #200,Vol1
  16478.     MOVE.W    #200,Vol2
  16479.     BRA    sru2
  16480.  
  16481. Vol1    dc.w    100
  16482. Vol2    dc.w    100
  16483.  
  16484. TuningTone
  16485.     JSR    WaitForButtonUp
  16486.     CLR.B    RawKeyCode
  16487.     TST.W    TToneFlag
  16488.     BNE    TToneOff
  16489.     MOVE.W    #1,TToneFlag
  16490.     MOVE.W    PattCurPos,D2
  16491.     DIVU    #6,D2
  16492.     ADDQ.W    #1,D2
  16493.     AND.W    #3,D2
  16494.     MOVEQ    #1,D0
  16495.     LSL.W    D2,D0
  16496.     MOVE.W    D0,TToneBit
  16497.     LEA    $DFF0A0,A0
  16498.     LSL.W    #4,D2
  16499.     LEA    (A0,D2.W),A0
  16500.     LEA    PeriodTable(PC),A1
  16501.     MOVE.W    TuneNote,D1
  16502.     LSL.W    #1,D1
  16503.     MOVE.W    (A1,D1.W),D1
  16504.     LEA    TToneData,A2
  16505.     MOVE.W    D0,$DFF096 ; DMACON
  16506.     MOVE.L    A2,(A0)
  16507.     MOVE.W    #16,4(A0) ; 32 bytes
  16508.     MOVE.W    D1,6(A0)
  16509.     MOVE.W    TToneVol,8(A0)
  16510.     MOVE.W    DMAWait,D2
  16511. ttowait    DBRA    D2,ttowait
  16512.     BSET    #15,D0
  16513.     MOVE.W    D0,$DFF096
  16514.     RTS
  16515.  
  16516. TToneOff
  16517.     CLR.W    TToneFlag
  16518.     MOVE.W    TToneBit(PC),$DFF096
  16519.     RTS
  16520.  
  16521. TToneFlag    dc.w 0
  16522. TToneBit    dc.w 0
  16523.  
  16524. SamplePressed
  16525.     CMP.W    #144,D1
  16526.     BHS.S    spruskp
  16527.     MOVE.W    LoopStartPos(PC),D2
  16528.     BEQ.S    sprusk5
  16529.     SUBQ.W    #3,D2
  16530.     CMP.W    D2,D0
  16531.     BLT.S    sprusk5
  16532.     ADDQ.W    #4,D2
  16533.     CMP.W    D2,D0
  16534.     BLO    LoopStartDrag
  16535. sprusk5    MOVE.W    LoopEndPos(PC),D2
  16536.     BEQ.S    spruskp
  16537.     SUBQ.W    #3,D2
  16538.     CMP.W    D2,D0
  16539.     BLT.S    spruskp
  16540.     ADDQ.W    #4,D2
  16541.     CMP.W    D2,D0
  16542.     BLO    LoopEndDrag
  16543. spruskp    CMP.W    #3,D0
  16544.     BLO    Return2
  16545.     CMP.W    #317,D0
  16546.     BHS    Return2
  16547.     MOVE.W    D0,LastSamPos
  16548.     BSR    InvertRange
  16549.     MOVE.W    LastSamPos(PC),D0
  16550.     MOVE.W    D0,MarkStart
  16551.     MOVE.W    D0,MarkEnd
  16552.     BSR    InvertRange
  16553.     BSR    MarkToOffset
  16554.     MOVE.L    MarkEndOfs(PC),SamplePos
  16555.     BSR    ShowPos
  16556. sprulop    BTST    #6,$BFE001
  16557.     BNE    spruend
  16558.     MOVE.W    MouseX(PC),D0
  16559.     CMP.W    #3,D0
  16560.     BLO    sprusk3
  16561.     CMP.W    #317,D0
  16562.     BHS    sprusk2
  16563.     BRA    sprusk4
  16564. sprusk2    MOVE.W    #316,D0
  16565.     BRA    sprusk4
  16566. sprusk3    MOVEQ    #3,D0
  16567. sprusk4    CMP.W    LastSamPos(PC),D0
  16568.     BEQ    sprulop
  16569.     MOVE.W    D0,LastSamPos
  16570.     BSR    InvertRange
  16571.     MOVE.W    LastSamPos(PC),MarkEnd
  16572.     BSR    InvertRange
  16573.     BSR    MarkToOffset
  16574.     MOVE.L    MarkEndOfs(PC),SamplePos
  16575.     BSR    ShowPos
  16576.     BRA    sprulop
  16577. spruend    MOVE.W    MarkStart(PC),D0
  16578.     MOVE.W    MarkEnd(PC),D1
  16579.     CMP.W    D0,D1
  16580.     BHS    MarkToOffset
  16581.     MOVE.W    D0,MarkEnd
  16582.     MOVE.W    D1,MarkStart
  16583.     BRA    MarkToOffset
  16584.  
  16585. InvertRange
  16586.     MOVE.W    MarkStart(PC),D4
  16587.     BEQ    Return2
  16588.     MOVE.W    MarkEnd(PC),D5
  16589.     MOVE.L    GfxBase(PC),A6
  16590.     JSR    LVOOwnBlitter(A6)
  16591.     JSR    LVOWaitBlit(A6)
  16592. invran3    MOVE.W    D4,D0
  16593.     MOVEQ    #0,D1
  16594.     MOVE.W    D4,D2
  16595.     MOVEQ    #64,D3
  16596.     BSR    DrawInvertLine
  16597.     CMP.W    D5,D4
  16598.     BEQ    invranx
  16599.     BHI    invran2
  16600.     ADDQ.W    #1,D4
  16601.     BRA    invran3
  16602. invran2    SUBQ.W    #1,D4
  16603.     BRA    invran3
  16604.  
  16605. invranx    MOVE.L    GfxBase(PC),A6
  16606.     JSR    LVODisownBlitter(A6)
  16607.     RTS
  16608.  
  16609. LoopStartPos    dc.w 0
  16610. LoopEndPos    dc.w 0
  16611.  
  16612. LoopStartDrag
  16613.     CLR.W    DragType
  16614. LopDrgLop
  16615.     MOVE.L    SongDataPtr(PC),A0
  16616.     MOVE.W    InsNum(PC),D0
  16617.     BEQ    Return2
  16618.     MULU    #30,D0
  16619.     LEA    12(A0,D0.W),A0
  16620.     MOVE.W    MouseX(PC),D0
  16621. lsdlop1    BTST    #6,$BFE001
  16622.     BNE    lsdexit
  16623.     MOVE.W    MouseX(PC),D1
  16624.     CMP.W    D0,D1
  16625.     BEQ.S    lsdlop1
  16626.     SUB.W    DragType,D1
  16627.     BPL.S    lsdmsk1
  16628.     MOVEQ    #0,D1
  16629. lsdmsk1    CMP.W    #314,D1
  16630.     BLO.S    lsdmsk2
  16631.     MOVE.W    #314,D1
  16632. lsdmsk2    MOVE.L    SamDisplay(PC),D0
  16633.     MULU    D0,D1
  16634.     DIVU    #314,D1
  16635.     MOVE.L    SamOffset(PC),D0
  16636.     ADD.W    D1,D0    ; new repeat
  16637.     BCLR    #0,D0
  16638.     MOVEQ    #0,D1
  16639.     MOVE.W    4(A0),D1 ; old repeat
  16640.     ADD.W    D1,D1
  16641.     TST.W    DragType
  16642.     BNE.S    drgrepl
  16643.     MOVE.W    D1,D3
  16644.     SUB.W    D1,D0    ; offset
  16645.     ADD.W    D0,D1
  16646.     MOVE.W    6(A0),D2
  16647.     ADD.W    D2,D2
  16648.     ADD.W    D2,D3
  16649.     SUBQ.W    #2,D3
  16650.     SUB.W    D0,D2
  16651.     CMP.W    D3,D1
  16652.     BLS.S    lsdok
  16653.     MOVE.W    D3,D1
  16654.     MOVEQ    #2,D2
  16655. lsdok    LSR.W    #1,D1
  16656.     MOVE.W    D1,4(A0)
  16657.     LSR.W    #1,D2
  16658.     MOVE.W    D2,6(A0)
  16659.     BSR.S    lsdexit
  16660.     BRA    LopDrgLop
  16661. lsdexit    BSR    ShowSampleInfo
  16662.     BSR    UpdateRepeats
  16663.     BRA    SetLoopSprites2
  16664.  
  16665. LoopEndDrag
  16666.     MOVE.W    #3,DragType
  16667.     BRA    LopDrgLop
  16668.  
  16669. drgrepl    MOVE.L    D0,D2 ; repend
  16670.     SUB.L    D1,D2 ; subtract repstart
  16671.     CMP.L    #2,D2
  16672.     BGT.S    ledskp1
  16673.     MOVEQ    #2,D2
  16674.     BRA.S    lsdok
  16675.  
  16676. ledskp1    MOVE.W    D1,D0 ; repeat
  16677.     ADD.W    D2,D0 ; + replen
  16678.     MOVE.W    (A0),D3
  16679.     ADD.W    D3,D3
  16680.     CMP.W    D3,D0
  16681.     BLS.S    lsdok
  16682.     SUB.W    D1,D3
  16683.     MOVE.W    D3,D2
  16684.     BRA.S    lsdok
  16685.  
  16686. DragType dc.w 0
  16687.  
  16688. SamDragBar
  16689.     CMP.W    #4,D0
  16690.     BLO    Return2
  16691.     CMP.W    #316,D0
  16692.     BHS    Return2
  16693.     CMP.W    DragStart(PC),D0
  16694.     BLO.S    draglo
  16695.     CMP.W    DragEnd(PC),D0
  16696.     BHI.S    draghi
  16697.     MOVE.W    MouseX(PC),D0
  16698.     MOVE.W    D0,D1
  16699.     SUB.W    DragStart(PC),D1
  16700.     MOVE.W    D1,SaveMX
  16701. sdrlop1    BTST    #6,$BFE001
  16702.     BNE    Return2
  16703.     MOVE.W    MouseX(PC),D1
  16704.     CMP.W    D0,D1
  16705.     BEQ.S    sdrlop1
  16706.     SUB.W    SaveMX(PC),D0
  16707.     SUBQ.W    #4,D0
  16708.     BPL.S    sdrskp1
  16709.     MOVEQ    #0,D0
  16710. sdrskp1    MOVE.L    SamLength(PC),D1
  16711.     BEQ    Return2
  16712.     MULU    D1,D0
  16713.     DIVU    #311,D0
  16714.     AND.L    #$FFFF,D0
  16715.     BSR    dragchk
  16716.     MOVE.W    MouseX(PC),D0
  16717.     BRA.S    sdrlop1
  16718.  
  16719. draglo    MOVE.L    SamOffset(PC),D0
  16720.     SUB.L    SamDisplay(PC),D0
  16721.     BPL.S    draglo2
  16722.     MOVEQ    #0,D0
  16723. draglo2    CMP.L    SamOffset(PC),D0
  16724.     BEQ    Return2
  16725.     MOVE.L    D0,SamOffset
  16726.     BRA    DisplaySample
  16727.  
  16728. draghi    MOVE.L    SamOffset(PC),D0
  16729.     ADD.L    SamDisplay(PC),D0
  16730. dragchk    MOVE.L    D0,D1
  16731.     ADD.L    SamDisplay(PC),D1
  16732.     CMP.L    SamLength(PC),D1
  16733.     BLS.S    draglo2
  16734.     MOVE.L    SamLength(PC),D0
  16735.     SUB.L    SamDisplay(PC),D0
  16736.     BRA.S    draglo2
  16737.  
  16738. SaveMX    dc.w    0
  16739.  
  16740. ;----
  16741.  
  16742. MarkToOffset
  16743.     MOVE.L    SamDisplay(PC),D0
  16744.     MOVE.W    MarkStart(PC),D1
  16745.     BEQ    Return2
  16746.     SUBQ.W    #3,D1
  16747.     MULU    D0,D1
  16748.     DIVU    #314,D1
  16749.     AND.L    #$FFFF,D1
  16750.     ADD.L    SamOffset(PC),D1
  16751.     MOVE.L    D1,MarkStartOfs
  16752.     MOVE.W    MarkEnd(PC),D1
  16753.     CMP.W    #316,D1
  16754.     BLO.S    mtosome
  16755.     MOVE.L    SamOffset(PC),D1
  16756.     ADD.L    D0,D1
  16757.     BRA.S    mtoexit
  16758. mtosome    SUBQ.W    #3,D1
  16759.     MULU    D0,D1
  16760.     DIVU    #314,D1
  16761.     AND.L    #$FFFF,D1
  16762.     ADD.L    SamOffset(PC),D1
  16763. mtoexit    MOVE.L    D1,MarkEndOfs
  16764.     RTS
  16765.  
  16766. OffsetToMark
  16767.     MOVE.L    MarkStartOfs(PC),D0
  16768.     BMI.S    otmout
  16769.     MOVE.W    #3,MarkStart
  16770.     SUB.L    SamOffset(PC),D0
  16771.     BMI.S    otmskip    ; set to start if before offset
  16772.     MULU    #314,D0
  16773.     MOVE.L    SamDisplay(PC),D1
  16774.     BEQ.S    otmskip
  16775.     DIVU    D1,D0
  16776.     CMP.W    #314,D0
  16777.     BHI.S    otmout    ; if start after display
  16778.     ADD.W    D0,MarkStart
  16779. otmskip    MOVE.W    #3,MarkEnd
  16780.     MOVE.L    MarkEndOfs(PC),D0
  16781.     SUB.L    SamOffset(PC),D0
  16782.     BMI.S    otmout    ; if end before offset
  16783.     MULU    #314,D0
  16784.     MOVE.L    SamDisplay(PC),D1
  16785.     BEQ    Return2
  16786.     DIVU    D1,D0
  16787.     CMP.W    #313,D0
  16788.     BLS.S    otmok
  16789.     MOVE.W    #313,D0    ; set to end if after display
  16790. otmok    ADD.W    D0,MarkEnd
  16791.     RTS
  16792.  
  16793. otmout    CLR.W    MarkStart
  16794.     RTS
  16795.  
  16796. SamScrEnable    dc.w    0
  16797. SamMemPtr    dc.l    0
  16798. SamMemSize    dc.l    0
  16799. LastSamPos    dc.w    0
  16800. MarkStart    dc.w    0
  16801. MarkEnd        dc.w    0
  16802. MarkStartOfs    dc.l    0
  16803. MarkEndOfs    dc.l    0
  16804.  
  16805. ;---- Sample graphing stuff ----
  16806.  
  16807. DisplaySample
  16808.     TST.W    SamScrEnable
  16809.     BEQ    Return2
  16810.     BSR    rdsdoit
  16811.     TST.L    MarkStartOfs
  16812.     BMI    Return2
  16813.     BSR    OffsetToMark
  16814.     BRA    InvertRange
  16815.  
  16816. RedrawSample
  16817.     TST.W    SamScrEnable
  16818.     BEQ    Return2
  16819.     MOVEQ    #-1,D0
  16820.     MOVE.L    D0,MarkStartOfs
  16821.     CLR.W    MarkStart
  16822.     MOVE.W    InsNum(PC),D0
  16823.     BEQ    rdsblnk
  16824.     LEA    SampleStarts(PC),A1
  16825.     SUBQ.W    #1,D0
  16826.     LSL.W    #2,D0
  16827.     MOVE.L    (A1,D0.W),SamStart
  16828.     BEQ    rdsblnk
  16829.     MOVE.L    124(A1,D0.W),D1
  16830.     BEQ    rdsblnk
  16831.     MOVE.L    D1,SamLength
  16832.     CLR.L    SamOffset
  16833.     MOVE.L    D1,SamDisplay
  16834.     BRA    rdsdoit
  16835. rdsblnk    LEA    BlankSample,A0
  16836.     MOVE.L    A0,SamStart
  16837.     MOVE.L    #314,SamLength
  16838.     CLR.L    SamOffset
  16839.     MOVE.L    #314,SamDisplay
  16840. rdsdoit    MOVE.L    GfxBase(PC),A6
  16841.     JSR    LVOOwnBlitter(A6)
  16842.     JSR    LVOWaitBlit(A6)
  16843.     BSR    ClearSamArea
  16844.     MOVE.L    SamStart(PC),A0
  16845.     MOVEQ    #0,D4
  16846.     MOVE.L    SamOffset(PC),D5
  16847.     MOVE.L    SamDisplay(PC),D6
  16848.     MOVE.L    D5,D7
  16849.     MOVE.L    A0,D0
  16850.     ADD.L    D5,D0
  16851.     MOVE.L    D0,SamDrawStart
  16852.     ADD.L    D6,D0
  16853.     MOVE.L    D0,SamDrawEnd
  16854. rdsloop    MOVE.W    D4,D0
  16855.     ADDQ.W    #3,D0
  16856.     MOVEQ    #127,D1
  16857.     SUB.B    (A0,D7.L),D1
  16858.     LSR.W    #2,D1
  16859.     TST.W    D4
  16860.     BNE    rdsdraw
  16861.     BSR    MoveTo
  16862.     BRA    rdsupdt
  16863. rdsdraw    BSR    DrawTo
  16864. rdsupdt    ADDQ.W    #1,D4
  16865.     MOVE.L    D4,D7
  16866.     MULU    D6,D7
  16867.     DIVU    #314,D7
  16868.     AND.L    #$FFFF,D7
  16869.     ADD.L    D5,D7
  16870.     CMP.W    #314,D4
  16871.     BLO    rdsloop
  16872.  
  16873.     MOVE.L    GfxBase(PC),A6
  16874.     JSR    LVODisownBlitter(A6)
  16875.     BSR.S    SetDragBar
  16876.     MOVE.L    SamDisplay(PC),D0
  16877.     LEA    BlankSample,A0
  16878.     CMP.L    SamStart,A0
  16879.     BNE.S    rdsslwo
  16880.     MOVEQ    #0,D0
  16881. rdsslwo    MOVE.W    #215*40+33,TextOffset
  16882.     BSR    Print6DecDigits
  16883.     BRA    SetLoopSprites
  16884.  
  16885. SamStart    dc.l    0
  16886. SamLength    dc.l    0
  16887. SamOffset    dc.l    0
  16888. SamDisplay    dc.l    0
  16889. SavSamIns    dc.w    0
  16890.  
  16891. SetDragBar
  16892.     MOVE.W    #4*10-1,D0
  16893.     MOVE.L    TextBplPtr,A0
  16894.     LEA    $15B8+2720(A0),A0
  16895.     MOVEQ    #0,D1
  16896. sdblop2    MOVE.L    D1,(A0)+
  16897.     DBRA    D0,sdblop2
  16898.     MOVE.L    SamLength(PC),D0
  16899.     BEQ    Return2
  16900.     MOVE.L    SamOffset(PC),D4
  16901.     MOVE.L    SamDisplay(PC),D5
  16902.     CMP.L    D0,D5
  16903.     BEQ    Return2
  16904.     ADD.L    D4,D5
  16905.     MULU    #311,D4
  16906.     DIVU    D0,D4
  16907.     ADDQ.W    #4,D4
  16908.     MOVE.W    D4,DragStart
  16909.     MULU    #311,D5
  16910.     DIVU    D0,D5
  16911.     ADDQ.W    #5,D5
  16912.     MOVE.W    D5,DragEnd
  16913.     MOVE.L    GfxBase(PC),A6
  16914.     JSR    LVOOwnBlitter(A6)
  16915.     JSR    LVOWaitBlit(A6)
  16916.     MOVEQ    #68,D6
  16917.     MOVEQ    #3,D7
  16918. sdbloop    MOVE.W    D4,D0
  16919.     MOVE.L    D6,D1
  16920.     MOVE.W    D5,D2
  16921.     MOVE.L    D6,D3
  16922.     BSR.S    DrawLine
  16923.     ADDQ.L    #1,D6
  16924.     DBRA    D7,sdbloop
  16925.     MOVE.L    GfxBase(PC),A6
  16926.     JSR    LVODisownBlitter(A6)
  16927.     RTS
  16928.  
  16929. DragStart    dc.w    0
  16930. DragEnd        dc.w    0
  16931.  
  16932. ;---- Line Routine ----
  16933.  
  16934. DrawInvertLine
  16935.     MOVE.B    #$48,MinTerm
  16936.     BSR.S    DrawLine
  16937.     MOVE.B    #$C8,Minterm
  16938.     RTS
  16939.  
  16940. MoveTo    MOVE.W    D0,PenX
  16941.     MOVE.W    D1,PenY
  16942.     RTS
  16943.  
  16944. DrawTo    MOVE.W    PenX(PC),D2
  16945.     MOVE.W    PenY(PC),D3
  16946.     MOVE.W    D0,PenX
  16947.     MOVE.W    D1,PenY
  16948. DrawLine
  16949.     MOVEM.L    D4-D7,-(SP)
  16950.     MOVEQ    #0,D4
  16951.     SUB.W    D1,D3
  16952.     BGE.S    dypos
  16953.     NEG.W    D3
  16954.     BRA.S    dyneg
  16955. dypos    BSET    #0,D4
  16956. dyneg    SUB.W    D0,D2
  16957.     BGE.S    dxpos
  16958.     NEG.W    D2
  16959.     BRA.S    dxneg
  16960. dxpos    BSET    #1,D4
  16961. dxneg    MOVE.W    D2,D5
  16962.     SUB.W    D3,D5
  16963.     BGE.S    dxdypos
  16964.     EXG    D2,D3
  16965.     BRA.S    dxdyneg
  16966. dxdypos    BSET    #2,D4
  16967. dxdyneg    MOVEQ    #0,D5
  16968.     ROR.W    #4,D0
  16969.     OR.W    #$0B00,D0
  16970.     MOVE.B    D0,D5
  16971.     MOVE.B    MinTerm(PC),D0
  16972.     LSL.W    #1,D5
  16973.     MULS    #ScrWidth,D1
  16974.     ADD.W    D5,D1
  16975.     ADD.L    LineScreen(PC),D1
  16976. blitrdy    BTST    #14,$DFF002 ; DMACONR
  16977.     BNE.S    blitrdy
  16978.     MOVE.W    $DFF01C,-(SP)
  16979.     BSET    #7,(SP)
  16980.     MOVE.W    #$7FFF,$DFF09A
  16981.     MOVE.B    Octants(PC,D4),D4
  16982.     ADD.L    D3,D3
  16983.     MOVE.W    D3,$DFF062 ; BLTBMOD
  16984.     SUB.W    D2,D3
  16985.     BGE.S    dldspos
  16986.     OR.B    #$40,D4
  16987. dldspos    MOVE.L    D3,$DFF050 ; BLTAPTR
  16988.     SUB.W    D2,D3
  16989.     MOVE.W    D3,$DFF064 ; BLTAMOD
  16990.     MOVE.W    D4,$DFF042 ; BLTCON1
  16991.     MOVE.W    D0,$DFF040 ; BLTCON0
  16992.     MOVE.L    D1,$DFF048 ; BLTCPTR
  16993.     MOVE.L    D1,$DFF054 ; BLTDPTR
  16994.     MOVE.W    #ScrWidth,$DFF060 ; BLTCMOD
  16995.     MOVE.W    #ScrWidth,$DFF066 ; BLTDMOD
  16996.     MOVE.W    #$8000,$DFF074 ; BLTADAT
  16997.     MOVE.W    #$FFFF,$DFF044 ; BLTAFWM
  16998.     MOVE.W    LinMask(PC),$DFF072 ; BLTBDAT
  16999.     ASL.W    #6,D2
  17000.     ADD.W    #2,D2
  17001.     MOVE.W    D2,$DFF058 ; BLTSIZE
  17002.     MOVE.W    (SP)+,$DFF09A
  17003.     MOVEM.L    (SP)+,D4-D7
  17004.     RTS
  17005.  
  17006. ScrWidth = 40
  17007.  
  17008. Octants    dc.b    3*4+1,2*4+1,1*4+1,0*4+1,7*4+1,5*4+1,6*4+1,4*4+1
  17009. LinMask    dc.w    $FFFF
  17010. MinTerm    dc.b    $C8 ;was $CA
  17011.     dc.b    0   ;free 0
  17012. PenX    dc.w    0
  17013. PenY    dc.w    0
  17014. LineScreen dc.l    0
  17015.  
  17016. ;---- Loop Sprites ----
  17017.  
  17018. SetLoopSprites
  17019.     MOVEQ    #-1,D6
  17020.     MOVEQ    #-1,D7
  17021.     MOVE.W    InsNum(PC),D0
  17022.     BEQ    slsset
  17023.     MULU    #30,D0
  17024.     MOVE.L    SongDataPtr(PC),A0
  17025.     LEA    12(A0,D0.W),A0
  17026. SetLoopSprites2
  17027.     TST.W    SamScrEnable
  17028.     BEQ    Return2
  17029.     CLR.W    LoopOnOffFlag
  17030.     MOVEQ    #-1,D6
  17031.     MOVEQ    #-1,D7
  17032.     MOVEQ    #0,D0
  17033.     MOVE.W    4(A0),D0
  17034.     ADD.L    D0,D0
  17035.     MOVEQ    #0,D1
  17036.     MOVE.W    6(A0),D1
  17037.     ADD.L    D1,D1
  17038.     MOVE.L    D0,D5
  17039.     ADD.L    D1,D5
  17040.     CMP.W    #2,D5
  17041.     BLS.S    slsset
  17042.     MOVE.W    #1,LoopOnOffFlag
  17043.     MOVE.L    SamOffset(PC),D2
  17044.     MOVE.L    SamDisplay(PC),D3
  17045.     MOVE.L    D2,D4
  17046.     ADD.L    D3,D4
  17047.     CMP.L    D2,D0
  17048.     BLO.S    1$
  17049.     CMP.L    D4,D0
  17050.     BHI.S    1$
  17051.     SUB.L    D2,D0
  17052.     MULU    #314,D0
  17053.     DIVU    D3,D0
  17054.     ADDQ.W    #3,D0
  17055.     MOVE.W    D0,D6
  17056. 1$    CMP.L    D2,D5
  17057.     BLO.S    slsset
  17058.     CMP.L    D4,D5
  17059.     BHI.S    slsset
  17060.     SUB.L    D2,D5
  17061.     MULU    #314,D5
  17062.     DIVU    D3,D5
  17063.     ADDQ.W    #6,D5
  17064.     MOVE.W    D5,D7
  17065. slsset    MOVE.W    #139,D1
  17066.     MOVE.W    D6,D0
  17067.     BPL.S    1$
  17068.     MOVEQ    #0,D0
  17069.     MOVE.W    #270,D1
  17070. 1$    MOVEQ    #64,D2
  17071.     LEA    LoopSpriteData1,A0
  17072.     MOVE.W    D0,LoopStartPos
  17073.     BSR    SetSpritePos
  17074.     MOVE.W    #139,D1
  17075.     MOVE.W    D7,D0
  17076.     BPL.S    2$
  17077.     MOVEQ    #0,D0
  17078.     MOVE.W    #270,D1
  17079. 2$    MOVEQ    #64,D2
  17080.     LEA    LoopSpriteData2,A0
  17081.     MOVE.W    D0,LoopEndPos
  17082.     BSR    SetSpritePos
  17083.     BRA    ShowLoopToggle
  17084.  
  17085. ;---- Playroutine ----
  17086.  
  17087. audchan1temp    dc.l    0,0,0,0,0,$00010000,0,  0,0,0,0
  17088. audchan2temp    dc.l    0,0,0,0,0,$00020000,0,  0,0,0,0
  17089. audchan3temp    dc.l    0,0,0,0,0,$00040000,0,  0,0,0,0
  17090. audchan4temp    dc.l    0,0,0,0,0,$00080000,0,  0,0,0,0
  17091.  
  17092. IntMusic
  17093.     MOVEM.L    D0-D7/A0-A6,-(SP)
  17094.     MOVE.L    RunMode(PC),D0
  17095.     BEQ    NoNewPositionYet
  17096.     CMP.L    #'patt',D0
  17097.     BEQ.S    1$
  17098.     MOVE.L    SongPosition(PC),CurrPos
  17099. 1$    MOVE.L    SongDataPtr(PC),A0
  17100.     MOVE.B    sd_numofpatt(A0),SongNumOfPatt+1
  17101.     TST.W    StepPlayEnable
  17102.     BNE.S    2$
  17103.     ADDQ.L    #1,Counter
  17104.     MOVE.L    Counter(PC),D0
  17105.     CMP.L    CurrSpeed(PC),D0
  17106.     BLO.S    NoNewNote
  17107. 2$    CLR.L    Counter
  17108.     TST.B    PattDelayTime2
  17109.     BEQ.S    GetNewNote
  17110.     BSR.S    NoNewAllChannels
  17111.     BRA    dskip
  17112.  
  17113. NoNewNote
  17114.     BSR.S    NoNewAllChannels
  17115.     BRA    NoNewPositionYet
  17116.  
  17117. NoNewAllChannels
  17118.     LEA    audchan1toggle,A4
  17119.     LEA    audchan1temp(PC),A6
  17120.     LEA    $DFF0A0,A5
  17121.     BSR    CheckEffects
  17122.     LEA    audchan2toggle,A4
  17123.     LEA    audchan2temp(PC),A6
  17124.     LEA    $DFF0B0,A5
  17125.     BSR    CheckEffects
  17126.     LEA    audchan3toggle,A4
  17127.     LEA    audchan3temp(PC),A6
  17128.     LEA    $DFF0C0,A5
  17129.     BSR    CheckEffects
  17130.     LEA    audchan4toggle,A4
  17131.     LEA    audchan4temp(PC),A6
  17132.     LEA    $DFF0D0,A5
  17133.     BRA    CheckEffects
  17134.  
  17135.  
  17136. GetNewNote
  17137.     LEA    12(A0),A3
  17138.     LEA    sd_pattpos(A0),A2
  17139.     LEA    sd_patterndata(A0),A0
  17140.     MOVEQ    #0,D1
  17141.     MOVE.L    SongPosition(PC),D0
  17142.     MOVE.B    (A2,D0.W),D1
  17143.     CMP.L    #'patt',PunMode
  17144.     BNE.S    1$
  17145.     MOVE.L    PatterlLumber(PC),D1
  17146. 1$    ASL.L    #8,D1
  17147.  
  17148.     ASL.L    #2,D1
  17149.     ADD.L    PatternPosition(PC),D1
  17150.     MOVE.L    D1,PatternPtr
  17151.     CLR.W    DMACONtemp
  17152.     LEA    audchan1toggle,A4
  17153.     LEA    $DFF0A0,A5
  17154.     LEA    audchan1temp(PC),A6
  17155.     MOVEQ    #1,D2
  17156.     BSR    PlayVoice
  17157.     MOVEQ    #0,D0
  17158.     MOVE.B    n_volume(A6),D0
  17159.     MOVE.W    D0,8(A5)
  17160.     LEA    audchan2toggle,A4
  17161.     LEA    $DFF0B0,A5
  17162.     LEA    audchan2temp(PC),A6
  17163.     MOVEQ    #2,D2
  17164.     BSR.S    PlayVoice
  17165.     MOVEQ    #0,D0
  17166.     MOVE.B    n_volume(A6),D0
  17167.     MOVE.W    D0,8(A5)
  17168.     LEA    audchan3toggle,A4
  17169.     LEA    $DFF0C0,A5
  17170.     LEA    audchan3temp(PC),A6
  17171.     MOVEQ    #3,D2
  17172.     BSR.S    PlayVoice
  17173.     MOVEQ    #0,D0
  17174.     MOVE.B    n_volume(A6),D0
  17175.     MOVE.W    D0,8(A5)
  17176.     LEA    audchan4toggle,A4
  17177.     LEA    $DFF0D0,A5
  17178.     LEA    audchan4temp(PC),A6
  17179.     MOVEQ    #4,D2
  17180.     BSR.S    PlayVoice
  17181.     MOVEQ    #0,D0
  17182.     MOVE.B    n_volume(A6),D0
  17183.     MOVE.W    D0,8(A5)
  17184.     BRA    SetDMA
  17185.  
  17186. CheckMetronome
  17187.     CMP.B    MetroChannel,D2
  17188.     BNE    Return2
  17189.     MOVE.B    MetroSpeed,D2
  17190.     BEQ    Return2
  17191.     MOVE.L    PatternPosition,D3
  17192.     LSR.L    #4,D3
  17193.     DIVU    D2,D3
  17194.     SWAP    D3
  17195.     TST.W    D3
  17196.     BNE    Return2
  17197.     AND.L    #$00000FFF,(A6)
  17198.     OR.L    #$10D6F000,(A6) ; Play sample $1F at period $0D6 (214)
  17199.     RTS
  17200.  
  17201. PlayVoice
  17202.     TST.L    (A6)
  17203.     BNE.S    plvskip
  17204.     BSR    PerNop
  17205. plvskip    MOVE.L    (A0,D1.L),(A6)    ; Read note from pattern
  17206.     BSR.S    CheckMetronome
  17207.     ADDQ.L    #4,D1
  17208.     MOVEQ    #0,D2
  17209.     MOVE.B    n_cmd(A6),D2    ; Get lower 4 bits of instrument
  17210.     AND.B    #$F0,D2
  17211.     LSR.B    #4,D2
  17212.     MOVE.B    (A6),D0        ; Get higher 4 bits of instrument
  17213.     AND.B    #$F0,D0
  17214.     OR.B    D0,D2
  17215.     TST.B    D2
  17216.     BEQ    SetRegisters    ; Instrument was zero
  17217.     MOVEQ    #0,D3
  17218.     LEA    SampleStarts(PC),A1
  17219.     MOVE    D2,D4
  17220.     MOVE.B    D2,n_samplenum(A6)
  17221.     SUBQ.L    #1,D2
  17222.     LSL.L    #2,D2
  17223.     MULU    #30,D4
  17224.     MOVE.L    (A1,D2.L),n_start(A6)
  17225.     MOVE.W    (A3,D4.L),n_length(A6)
  17226.     MOVE.W    (A3,D4.L),n_reallength(A6)
  17227.     MOVE.B    2(A3,D4.L),n_finetune(A6)
  17228.     MOVE.B    3(A3,D4.L),n_volume(A6)
  17229.     MOVE.W    4(A3,D4.L),D3 ; Get repeat
  17230.     TST.W    D3
  17231.     BEQ.S    NoLoop
  17232.     MOVE.L    n_start(A6),D2    ; Get start
  17233.     ASL.W    #1,D3
  17234.     ADD.L    D3,D2        ; Add repeat
  17235.     MOVE.L    D2,n_loopstart(A6)
  17236.     MOVE.L    D2,n_wavestart(A6)
  17237.     MOVE.W    4(A3,D4.L),D0    ; Get repeat
  17238.     ADD.W    6(A3,D4.L),D0    ; Add replen
  17239.     MOVE.W    D0,n_length(A6)
  17240.     MOVE.W    6(A3,D4.L),n_replen(A6)    ; Save replen
  17241.     BRA.S    SetRegisters
  17242.  
  17243. NoLoop    MOVE.L    n_start(A6),D2
  17244.     ADD.L    D3,D2
  17245.     MOVE.L    D2,n_loopstart(A6)
  17246.     MOVE.L    D2,n_wavestart(A6)
  17247.     MOVE.W    6(A3,D4.L),n_replen(A6)    ; Save replen
  17248. SetRegisters
  17249.     MOVE.W    (A6),D0
  17250.     AND.W    #$0FFF,D0
  17251.     BEQ    CheckMoreEffects    ; If no note
  17252.     MOVE.W    2(A6),D0
  17253.     AND.W    #$0FF0,D0
  17254.     CMP.W    #$0E50,D0 ; finetune
  17255.     BEQ.S    DoSetFineTune
  17256.     MOVE.B    2(A6),D0
  17257.     AND.B    #$0F,D0
  17258.     CMP.B    #3,D0    ; TonePortamento
  17259.     BEQ.S    ChkTonePorta
  17260.     CMP.B    #5,D0    ; TonePortamento + VolSlide
  17261.     BEQ.S    ChkTonePorta
  17262.     CMP.B    #9,D0    ; Sample Offset
  17263.     BNE.S    SetPeriod
  17264.     BSR    CheckMoreEffects
  17265.     BRA.S    SetPeriod
  17266.  
  17267. DoSetFineTune
  17268.     BSR    SetFineTune
  17269.     BRA.S    SetPeriod
  17270.  
  17271. ChkTonePorta
  17272.     BSR    SetTonePorta
  17273.     BRA    CheckMoreEffects
  17274.  
  17275. SetPeriod
  17276.     MOVEM.L    D0-D1/A0-A1,-(SP)
  17277.     MOVE.W    (A6),D1
  17278.     AND.W    #$0FFF,D1
  17279.     LEA    PeriodTable(PC),A1
  17280.     MOVEQ    #0,D0
  17281.     MOVEQ    #$24,D7
  17282. ftuloop    CMP.W    (A1,D0.W),D1
  17283.     BHS    ftufound
  17284.     ADDQ.L    #2,D0
  17285.     DBRA    D7,ftuloop
  17286. ftufound
  17287.     MOVEQ    #0,D1
  17288.     MOVE.B    n_finetune(A6),D1
  17289.     MULU    #37*2,D1
  17290.     ADD.L    D1,A1
  17291.     MOVE.W    (A1,D0.W),n_period(A6)
  17292.     MOVEM.L    (SP)+,D0-D1/A0-A1
  17293.  
  17294.     MOVE.W    2(A6),D0
  17295.     AND.W    #$0FF0,D0
  17296.     CMP.W    #$0ED0,D0
  17297.     BEQ    CheckMoreEffects
  17298.  
  17299.     MOVE.W    n_dmabit(A6),$DFF096
  17300.     BTST    #2,n_wavecontrol(A6)
  17301.     BNE    vibnoc
  17302.     CLR.B    n_vibratopos(A6)
  17303. vibnoc    BTST    #6,n_wavecontrol(A6)
  17304.     BNE    trenoc
  17305.     CLR.B    n_tremolopos(A6)
  17306. trenoc    MOVE.W    n_length(A6),4(A5)    ; Set length
  17307.     MOVE.L    n_start(A6),(A5)    ; Set start
  17308.     BNE    sdmaskp
  17309.     CLR.L    n_loopstart(A6)
  17310.     MOVEQ    #1,D0
  17311.     MOVE.W    D0,4(A5)
  17312.     MOVE.W    D0,n_replen(A6)
  17313. sdmaskp    MOVE.W    n_period(A6),D0
  17314.     MOVE.W    D0,6(A5)        ; Set period
  17315.     JSR    SpectrumAnalyzer    ; Do the analyzer
  17316.     ST    n_trigger(A6)
  17317.     MOVE.W    n_dmabit(A6),D0
  17318.     OR.W    D0,DMACONtemp
  17319.     BRA    CheckMoreEffects
  17320.  
  17321. SetDMA    MOVE.W    DMAWait,D0
  17322. WaitDMA    DBRA    D0,WaitDMA
  17323.     MOVE.W    DMACONtemp,D0
  17324.     AND.W    ActiveChannels,D0
  17325.     OR.W    #$8000,D0
  17326.     MOVE.W    D0,$DFF096
  17327.     MOVE.W    DMAWait,D0
  17328. WaitDMA2
  17329.     DBRA    D0,WaitDMA2
  17330.     LEA    $DFF000,A5
  17331.     LEA    audchan4temp(PC),A6
  17332.     MOVE.L    n_loopstart(A6),$D0(A5)
  17333.     MOVE.W    n_replen(A6),$D4(A5)
  17334.     LEA    audchan3temp(PC),A6
  17335.     MOVE.L    n_loopstart(A6),$C0(A5)
  17336.     MOVE.W    n_replen(A6),$C4(A5)
  17337.     LEA    audchan2temp(PC),A6
  17338.     MOVE.L    n_loopstart(A6),$B0(A5)
  17339.     MOVE.W    n_replen(A6),$B4(A5)
  17340.     LEA    audchan1temp(PC),A6
  17341.     MOVE.L    n_loopstart(A6),$A0(A5)
  17342.     MOVE.W    n_replen(A6),$A4(A5)
  17343.  
  17344. dskip    TST.L    RunMode
  17345.     BEQ    dskipx
  17346.     BSR    SetPatternPos
  17347. dskipx    MOVE.L    PatternPosition(PC),D0
  17348.     LSR.L    #4,D0
  17349.     MOVE.W    D0,ScrPattPos
  17350.     ADD.L    #16,PatternPosition
  17351.     MOVE.B    PattDelayTime,D0
  17352.     BEQ    dskpc
  17353.     MOVE.B    D0,PattDelayTime2
  17354.     CLR.B    PattDelayTime
  17355. dskpc    TST.B    PattDelayTime2
  17356.     BEQ    dskpa
  17357.     SUBQ.B    #1,PattDelayTime2
  17358.     BEQ    dskpa
  17359.     SUB.L    #16,PatternPosition
  17360. dskpa    TST.B    PBreakFlag
  17361.     BEQ    nnpysk
  17362.     SF    PBreakFlag
  17363.     MOVEQ    #0,D0
  17364.     MOVE.B    PBreakPosition(PC),D0
  17365.     LSL.W    #4,D0
  17366.     MOVE.L    D0,PatternPosition
  17367.     CLR.B    PBreakPosition
  17368. nnpysk    TST.W    StepPlayEnable
  17369.     BEQ    nnpysk2
  17370.     BSR    DoStopIt
  17371.     CLR.W    StepPlayEnable
  17372.     MOVE.L    PatternPosition(PC),D0
  17373.     LSR.L    #4,D0
  17374.     AND.W    #63,D0
  17375.     MOVE.W    D0,ScrPattPos
  17376. nnpysk2    CMP.L    #1024,PatternPosition
  17377.     BNE    NoNewPositionYet
  17378. NextPosition    
  17379.     MOVEQ    #0,D0
  17380.     MOVE.B    PBreakPosition(PC),D0
  17381.     LSL.W    #4,D0
  17382.     MOVE.L    D0,PatternPosition
  17383.     CLR.B    PBreakPosition
  17384.     CLR.B    PosJumpAssert
  17385.     CMP.L    #'patp',RunMode
  17386.     BNE    NoNewPositionYet
  17387.     ADDQ.L    #1,SongPosition
  17388.     AND.L    #$7F,SongPosition
  17389.     MOVE.L    SongPosition(PC),D1
  17390.     MOVE.L    SongDataPtr(PC),A0
  17391.     CMP.B    sd_numofpatt(A0),D1
  17392.     BLO    NoNewPositionYet
  17393.     CLR.L    SongPosition
  17394.  
  17395.     TST.W    StepPlayEnable
  17396.     BEQ    NoNewPositionYet
  17397.     BSR    DoStopIt
  17398.     CLR.W    StepPlayEnable
  17399.     MOVE.L    PatternPosition(PC),D0
  17400.     LSR.L    #4,D0
  17401.     MOVE.W    D0,ScrPattPos
  17402.  
  17403. NoNewPositionYet
  17404.     TST.B    PosJumpAssert
  17405.     BNE    NextPosition
  17406.     MOVEM.L    (SP)+,D0-D7/A0-A6
  17407.     RTS
  17408.  
  17409. CheckEffects
  17410.     TST.W    (A4)
  17411.     BEQ    Return2
  17412.     BSR    chkefx2
  17413.     MOVEQ    #0,D0
  17414.     MOVE.B    n_volume(A6),D0
  17415.     MOVE.W    D0,8(A5)
  17416.     RTS
  17417.  
  17418. chkefx2    BSR    UpdateFunk
  17419.     MOVE.W    n_cmd(A6),D0
  17420.     AND.W    #$0FFF,D0
  17421.     BEQ    Return2
  17422.     MOVE.B    n_cmd(A6),D0
  17423.     AND.B    #$0F,D0
  17424.     TST.B    D0
  17425.     BEQ    Arpeggio
  17426.     CMP.B    #1,D0
  17427.     BEQ    PortaUp
  17428.     CMP.B    #2,D0
  17429.     BEQ    PortaDown
  17430.     CMP.B    #3,D0
  17431.     BEQ    TonePortamento
  17432.     CMP.B    #4,D0
  17433.     BEQ    Vibrato
  17434.     CMP.B    #5,D0
  17435.     BEQ    TonePlusVolSlide
  17436.     CMP.B    #6,D0
  17437.     BEQ    VibratoPlusVolSlide
  17438.     CMP.B    #$E,D0
  17439.     BEQ    E_Commands
  17440. SetBack    MOVE.W    n_period(A6),6(A5)
  17441.     CMP.B    #7,D0
  17442.     BEQ    Tremolo
  17443.     CMP.B    #$A,D0
  17444.     BEQ    VolumeSlide
  17445. Return2    RTS
  17446.  
  17447. PerNop    MOVE.W    n_period(A6),6(A5)
  17448.     RTS
  17449.  
  17450. Arpeggio
  17451.     MOVEQ    #0,D0
  17452.     MOVE.L    Counter(PC),D0
  17453.     DIVS    #3,D0
  17454.     SWAP    D0
  17455.     CMP.W    #1,D0
  17456.     BEQ    Arpeggio1
  17457.     CMP.W    #2,D0
  17458.     BEQ    Arpeggio2
  17459. Arpeggio0
  17460.     MOVE.W    n_period(A6),D2
  17461.     BRA    ArpeggioSet
  17462.  
  17463. Arpeggio1
  17464.     MOVEQ    #0,D0
  17465.     MOVE.B    n_cmdlo(A6),D0
  17466.     LSR.B    #4,D0
  17467.     BRA    ArpeggioFind
  17468.  
  17469. Arpeggio2
  17470.     MOVEQ    #0,D0
  17471.     MOVE.B    n_cmdlo(A6),D0
  17472.     AND.B    #15,D0
  17473. ArpeggioFind
  17474.     ASL.W    #1,D0
  17475.     MOVEQ    #0,D1
  17476.     MOVE.B    n_finetune(A6),D1
  17477.     MULU    #37*2,D1
  17478.     LEA    PeriodTable(PC),A0
  17479.     ADD.L    D1,A0
  17480.     MOVEQ    #0,D1
  17481.     MOVE.W    n_period(A6),D1
  17482.     MOVEQ    #$24,D7
  17483. arploop    MOVE.W    (A0,D0.W),D2
  17484.     CMP.W    (A0),D1
  17485.     BHS    ArpeggioSet
  17486.     ADDQ.L    #2,A0
  17487.     DBRA    D7,arploop
  17488.     RTS
  17489.  
  17490. ArpeggioSet
  17491.     MOVE.W    D2,6(A5)
  17492.     RTS
  17493.  
  17494. FinePortaUp
  17495.     TST.L    Counter
  17496.     BNE    Return2
  17497.     MOVE.B    #$0F,LowMask
  17498. PortaUp    MOVEQ    #0,D0
  17499.     MOVE.B    n_cmdlo(A6),D0
  17500.     AND.B    LowMask,D0
  17501.     MOVE.B    #$FF,LowMask
  17502.     SUB.W    D0,n_period(A6)
  17503.     MOVE.W    n_period(A6),D0
  17504.     AND.W    #$0FFF,D0
  17505.     CMP.W    #$0071,D0
  17506.     BPL    PortaUskip
  17507.     AND.W    #$F000,n_period(A6)
  17508.     OR.W    #$0071,n_period(A6)
  17509. PortaUskip    MOVE.W    n_period(A6),D0
  17510.     AND.W    #$0FFF,D0
  17511.     MOVE.W    D0,6(A5)
  17512.     RTS
  17513.  
  17514. FinePortaDown
  17515.     TST.L    Counter
  17516.     BNE    Return2
  17517.     MOVE.B    #$0F,LowMask
  17518. PortaDown
  17519.     CLR.W    D0
  17520.     MOVE.B    n_cmdlo(A6),D0
  17521.     AND.B    LowMask,D0
  17522.     MOVE.B    #$FF,LowMask
  17523.     ADD.W    D0,n_period(A6)
  17524.     MOVE.W    n_period(A6),D0
  17525.     AND.W    #$0FFF,D0
  17526.     CMP.W    #$0358,D0
  17527.     BMI    PortaDskip
  17528.     AND.W    #$F000,n_period(A6)
  17529.     OR.W    #$0358,n_period(A6)
  17530. PortaDskip    MOVE.W    n_period(A6),D0
  17531.     AND.W    #$0FFF,D0
  17532.     MOVE.W    D0,6(A5)
  17533.     RTS
  17534.  
  17535. SetTonePorta
  17536.     MOVE.L    A0,-(SP)
  17537.     MOVE.W    (A6),D2
  17538.     AND.W    #$0FFF,D2
  17539.     MOVEQ    #0,D0
  17540.     MOVE.B    n_finetune(A6),D0
  17541.     MULU    #37*2,D0
  17542.     LEA    PeriodTable(PC),A0
  17543.     ADD.L    D0,A0
  17544.     MOVEQ    #0,D0
  17545. StpLoop    CMP.W    (A0,D0.W),D2
  17546.     BHS    StpFound
  17547.     ADDQ.W    #2,D0
  17548.     CMP.W    #37*2,D0
  17549.     BLO    StpLoop
  17550.     MOVEQ    #35*2,D0
  17551. StpFound
  17552.     MOVE.B    n_finetune(A6),D2
  17553.     AND.B    #8,D2
  17554.     BEQ    StpGoss
  17555.     TST.W    D0
  17556.     BEQ    StpGoss
  17557.     SUBQ.W    #2,D0
  17558. StpGoss    MOVE.W    (A0,D0.W),D2
  17559.     MOVE.L    (SP)+,A0
  17560.     MOVE.W    D2,n_wantedperiod(A6)
  17561.     MOVE.W    n_period(A6),D0
  17562.     CLR.B    n_toneportdirec(A6)
  17563.     CMP.W    D0,D2
  17564.     BEQ    ClearTonePorta
  17565.     BGE    Return2
  17566.     MOVE.B    #1,n_toneportdirec(A6)
  17567.     RTS
  17568.  
  17569. ClearTonePorta
  17570.     CLR.W    n_wantedperiod(A6)
  17571.     RTS    
  17572.  
  17573.  
  17574. TonePortamento
  17575.     MOVE.B    n_cmdlo(A6),D0
  17576.     BEQ    TonePortNoChange
  17577.     MOVE.B    D0,n_toneportspeed(A6)
  17578.     CLR.B    n_cmdlo(A6)
  17579. TonePortNoChange
  17580.     TST.W    n_wantedperiod(A6)
  17581.     BEQ    Return2
  17582.     MOVEQ    #0,D0
  17583.     MOVE.B    n_toneportspeed(A6),D0
  17584.     TST.B    n_toneportdirec(A6)
  17585.     BNE    TonePortaUp
  17586. TonePortaDown
  17587.     ADD.W    D0,n_period(A6)
  17588.     MOVE.W    n_wantedperiod(A6),D0
  17589.     CMP.W    n_period(A6),D0
  17590.     BGT    TonePortaSetPer
  17591.     MOVE.W    n_wantedperiod(A6),n_period(A6)
  17592.     CLR.W    n_wantedperiod(A6)
  17593.     BRA    TonePortaSetPer
  17594.  
  17595. TonePortaUp
  17596.     SUB.W    D0,n_period(A6)
  17597.     MOVE.W    n_wantedperiod(A6),D0
  17598.     CMP.W    n_period(A6),D0
  17599.     BLT    TonePortaSetPer
  17600.     MOVE.W    n_wantedperiod(A6),n_period(A6)
  17601.     CLR.W    n_wantedperiod(A6)
  17602.  
  17603. TonePortaSetPer
  17604.     MOVE.W    n_period(A6),D2
  17605.     MOVE.B    n_glissfunk(A6),D0
  17606.     AND.B    #$0F,D0
  17607.     BEQ    GlissSkip
  17608.     MOVEQ    #0,D0
  17609.     MOVE.B    n_finetune(A6),D0
  17610.     MULU    #37*2,D0
  17611.     LEA    PeriodTable(PC),A0
  17612.     ADD.L    D0,A0
  17613.     MOVEQ    #0,D0
  17614. GlissLoop
  17615.     CMP.W    (A0,D0.W),D2
  17616.     BHS    GlissFound
  17617.     ADDQ.W    #2,D0
  17618.     CMP.W    #37*2,D0
  17619.     BLO    GlissLoop
  17620.     MOVEQ    #35*2,D0
  17621. GlissFound
  17622.     MOVE.W    (A0,D0.W),D2
  17623. GlissSkip
  17624.     MOVE.W    D2,6(A5) ; Set period
  17625.     RTS
  17626.  
  17627. Vibrato    MOVE.B    n_cmdlo(A6),D0
  17628.     BEQ    Vibrato2
  17629.     MOVE.B    n_vibratocmd(A6),D2
  17630.     AND.B    #$0F,D0
  17631.     BEQ    vibskip
  17632.     AND.B    #$F0,D2
  17633.     OR.B    D0,D2
  17634. vibskip    MOVE.B    n_cmdlo(A6),D0
  17635.     AND.B    #$F0,D0
  17636.     BEQ    vibskip2
  17637.     AND.B    #$0F,D2
  17638.     OR.B    D0,D2
  17639. vibskip2
  17640.     MOVE.B    D2,n_vibratocmd(A6)
  17641. Vibrato2
  17642.     MOVE.L    A4,-(SP)
  17643.     MOVE.B    n_vibratopos(A6),D0
  17644.     LEA    VibratoTable(PC),A4
  17645.     LSR.W    #2,D0
  17646.     AND.W    #$001F,D0
  17647.     MOVEQ    #0,D2
  17648.     MOVE.B    n_wavecontrol(A6),D2
  17649.     AND.B    #$03,D2
  17650.     BEQ    vib_sine
  17651.     LSL.B    #3,D0
  17652.     CMP.B    #1,D2
  17653.     BEQ    vib_rampdown
  17654.     MOVE.B    #255,D2
  17655.     BRA    vib_set
  17656. vib_rampdown
  17657.     TST.B    n_vibratopos(A6)
  17658.     BPL    vib_rampdown2
  17659.     MOVE.B    #255,D2
  17660.     SUB.B    D0,D2
  17661.     BRA    vib_set
  17662. vib_rampdown2
  17663.     MOVE.B    D0,D2
  17664.     BRA    vib_set
  17665. vib_sine
  17666.     MOVE.B    0(A4,D0.W),D2
  17667. vib_set
  17668.     MOVE.B    n_vibratocmd(A6),D0
  17669.     AND.W    #15,D0
  17670.     MULU    D0,D2
  17671.     LSR.W    #7,D2
  17672.     MOVE.W    n_period(A6),D0
  17673.     TST.B    n_vibratopos(A6)
  17674.     BMI    VibratoNeg
  17675.     ADD.W    D2,D0
  17676.     BRA    Vibrato3
  17677. VibratoNeg
  17678.     SUB.W    D2,D0
  17679. Vibrato3
  17680.     MOVE.W    D0,6(A5)
  17681.     MOVE.B    n_vibratocmd(A6),D0
  17682.     LSR.W    #2,D0
  17683.     AND.W    #$003C,D0
  17684.     ADD.B    D0,n_vibratopos(A6)
  17685.     MOVE.L    (SP)+,A4
  17686.     RTS
  17687.  
  17688. TonePlusVolSlide
  17689.     BSR    TonePortNoChange
  17690.     BRA    VolumeSlide
  17691.  
  17692. VibratoPlusVolSlide
  17693.     BSR    Vibrato2
  17694.     BRA    VolumeSlide
  17695.  
  17696. Tremolo    MOVE.L    A4,-(SP)
  17697.     MOVE.B    n_cmdlo(A6),D0
  17698.     BEQ    Tremolo2
  17699.     MOVE.B    n_tremolocmd(A6),D2
  17700.     AND.B    #$0F,D0
  17701.     BEQ    treskip
  17702.     AND.B    #$F0,D2
  17703.     OR.B    D0,D2
  17704. treskip    MOVE.B    n_cmdlo(A6),D0
  17705.     AND.B    #$F0,D0
  17706.     BEQ    treskip2
  17707.     AND.B    #$0F,D2
  17708.     OR.B    D0,D2
  17709. treskip2
  17710.     MOVE.B    D2,n_tremolocmd(A6)
  17711. Tremolo2
  17712.     MOVE.B    n_tremolopos(A6),D0
  17713.     LEA    VibratoTable(PC),A4
  17714.     LSR.W    #2,D0
  17715.     AND.W    #$001F,D0
  17716.     MOVEQ    #0,D2
  17717.     MOVE.B    n_wavecontrol(A6),D2
  17718.     LSR.B    #4,D2
  17719.     AND.B    #$03,D2
  17720.     BEQ    tre_sine
  17721.     LSL.B    #3,D0
  17722.     CMP.B    #1,D2
  17723.     BEQ    tre_rampdown
  17724.     MOVE.B    #255,D2
  17725.     BRA    tre_set
  17726. tre_rampdown
  17727.     TST.B    n_vibratopos(A6)
  17728.     BPL    tre_rampdown2
  17729.     MOVE.B    #255,D2
  17730.     SUB.B    D0,D2
  17731.     BRA    tre_set
  17732. tre_rampdown2
  17733.     MOVE.B    D0,D2
  17734.     BRA    tre_set
  17735. tre_sine
  17736.     MOVE.B    0(A4,D0.W),D2
  17737. tre_set
  17738.     MOVE.B    n_tremolocmd(A6),D0
  17739.     AND.W    #15,D0
  17740.     MULU    D0,D2
  17741.     LSR.W    #6,D2
  17742.     MOVEQ    #0,D0
  17743.     MOVE.B    n_volume(A6),D0
  17744.     TST.B    n_tremolopos(A6)
  17745.     BMI    TremoloNeg
  17746.     ADD.W    D2,D0
  17747.     BRA    Tremolo3
  17748. TremoloNeg
  17749.     SUB.W    D2,D0
  17750. Tremolo3
  17751.     BPL    TremoloSkip
  17752.     CLR.W    D0
  17753. TremoloSkip
  17754.     CMP.W    #$40,D0
  17755.     BLS    TremoloOk
  17756.     MOVE.W    #$40,D0
  17757. TremoloOk
  17758.     MOVE.W    D0,8(A5)
  17759.     MOVE.B    n_tremolocmd(A6),D0
  17760.     LSR.W    #2,D0
  17761.     AND.W    #$003C,D0
  17762.     ADD.B    D0,n_tremolopos(A6)
  17763.     MOVE.L    (SP)+,A4
  17764.     ADDQ.L    #4,SP
  17765.     RTS
  17766.  
  17767. SampleOffset
  17768.     MOVEQ    #0,D0
  17769.     MOVE.B    n_cmdlo(A6),D0
  17770.     BEQ    sononew
  17771.     MOVE.B    D0,n_sampleoffset(A6)
  17772. sononew    MOVE.B    n_sampleoffset(A6),D0
  17773.     LSL.W    #7,D0
  17774.     CMP.W    n_length(A6),D0
  17775.     BGE    sofskip
  17776.     SUB.W    D0,n_length(A6)
  17777.     LSL.W    #1,D0
  17778.     ADD.L    D0,n_start(A6)
  17779.     RTS
  17780. sofskip MOVE.W    #$0001,n_length(A6)
  17781.     RTS
  17782.  
  17783. VolumeSlide
  17784.     MOVEQ    #0,D0
  17785.     MOVE.B    n_cmdlo(A6),D0
  17786.     LSR.B    #4,D0
  17787.     TST.B    D0
  17788.     BEQ    VolSlideDown
  17789. VolSlideUp
  17790.     ADD.B    D0,n_volume(A6)
  17791.     CMP.B    #$40,n_volume(A6)
  17792.     BMI    vsuskip
  17793.     MOVE.B    #$40,n_volume(A6)
  17794. vsuskip    MOVE.B    n_volume(A6),D0
  17795. ;    MOVE.W    D0,8(A5)
  17796.     RTS
  17797.  
  17798. VolSlideDown
  17799.     MOVEQ    #0,D0
  17800.     MOVE.B    n_cmdlo(A6),D0
  17801.     AND.B    #$0F,D0
  17802. VolSlideDown2
  17803.     SUB.B    D0,n_volume(A6)
  17804.     BPL    vsdskip
  17805.     CLR.B    n_volume(A6)
  17806. vsdskip    MOVE.B    n_volume(A6),D0
  17807. ;    MOVE.W    D0,8(A5)
  17808.     RTS
  17809.  
  17810. PositionJump
  17811.     MOVEQ    #0,D0
  17812.     MOVE.B    n_cmdlo(A6),D0
  17813.     SUBQ.B    #1,D0
  17814.     MOVE.L    D0,SongPosition
  17815. pj2    CLR.B    PBreakPosition
  17816.     ST     PosJumpAssert
  17817.     RTS
  17818.  
  17819. VolumeChange
  17820.     MOVEQ    #0,D0
  17821.     MOVE.B    n_cmdlo(A6),D0
  17822.     CMP.B    #$40,D0
  17823.     BLS    VolumeOk
  17824.     MOVEQ    #$40,D0
  17825. VolumeOk
  17826.     MOVE.B    D0,n_volume(A6)
  17827. ;    MOVE.W    D0,8(A5)
  17828.     RTS
  17829.  
  17830. PatternBreak
  17831.     MOVEQ    #0,D0
  17832.     MOVE.B    n_cmdlo(A6),D0
  17833.     MOVE.L    D0,D2
  17834.     LSR.B    #4,D0
  17835.     MULU    #10,D0
  17836.     AND.B    #$0F,D2
  17837.     ADD.B    D2,D0
  17838.     CMP.B    #63,D0
  17839.     BHI    pj2
  17840.     MOVE.B    D0,PBreakPosition
  17841.     ST    PosJumpAssert
  17842.     RTS
  17843.  
  17844. SetSpeed
  17845.     MOVE.B    3(A6),D0
  17846.     AND.W    #$FF,D0
  17847.     BEQ.S    SpeedNull
  17848.     TST.B    IntMode
  17849.     BEQ.S    normspd
  17850.     CMP.W    #32,D0
  17851.     BLO.S    normspd
  17852.     MOVE.W    D0,RealTempo
  17853.     MOVEM.L    D0-D7/A0-A6,-(SP)
  17854.     MOVE.W    SamScrEnable,-(SP)
  17855.     ST    SamScrEnable
  17856.     ST    UpdateTempo
  17857.     JSR    SetTempo
  17858.     MOVE.W    (SP)+,SamScrEnable
  17859.     MOVEM.L    (SP)+,D0-D7/A0-A6
  17860.     RTS
  17861. normspd    CLR.L    Counter
  17862.     MOVE.W    D0,CurrSpeed+2
  17863.     RTS
  17864. SpeedNull
  17865.     CLR.L    RunMode
  17866.     JSR    SetNormalPtrCol
  17867.     RTS
  17868.  
  17869.  
  17870. CheckMoreEffects
  17871.     MOVE.B    2(A6),D0
  17872.     AND.B    #$0F,D0
  17873.     CMP.B    #$9,D0
  17874.     BEQ    SampleOffset
  17875.     CMP.B    #$B,D0
  17876.     BEQ    PositionJump
  17877.     CMP.B    #$D,D0
  17878.     BEQ    PatternBreak
  17879.     CMP.B    #$E,D0
  17880.     BEQ    E_Commands
  17881.     CMP.B    #$F,D0
  17882.     BEQ    SetSpeed
  17883.     TST.W    (A4)
  17884.     BEQ    Return2
  17885.     CMP.B    #$C,D0
  17886.     BEQ    VolumeChange
  17887.     BRA    PerNop
  17888.  
  17889. E_Commands
  17890.     MOVE.B    n_cmdlo(A6),D0
  17891.     AND.B    #$F0,D0
  17892.     LSR.B    #4,D0
  17893.     BEQ    FilterOnOff
  17894.     CMP.B    #1,D0
  17895.     BEQ    FinePortaUp
  17896.     CMP.B    #2,D0
  17897.     BEQ    FinePortaDown
  17898.     CMP.B    #3,D0
  17899.     BEQ    SetGlissControl
  17900.     CMP.B    #4,D0
  17901.     BEQ    SetVibratoControl
  17902.     CMP.B    #5,D0
  17903.     BEQ    SetFineTune
  17904.     CMP.B    #6,D0
  17905.     BEQ    JumpLoop
  17906.     CMP.B    #7,D0
  17907.     BEQ    SetTremoloControl
  17908.     CMP.B    #8,D0
  17909.     BEQ    KarplusStrong
  17910.     CMP.B    #$E,D0
  17911.     BEQ    PatternDelay
  17912.     TST.W    (A4)
  17913.     BEQ    Return2
  17914.     CMP.B    #9,D0
  17915.     BEQ    RetrigNote
  17916.     CMP.B    #$A,D0
  17917.     BEQ    VolumeFineUp
  17918.     CMP.B    #$B,D0
  17919.     BEQ    VolumeFineDown
  17920.     CMP.B    #$C,D0
  17921.     BEQ    NoteCut
  17922.     CMP.B    #$D,D0
  17923.     BEQ    NoteDelay
  17924.     CMP.B    #$F,D0
  17925.     BEQ    FunkIt
  17926.     RTS
  17927.  
  17928. FilterOnOff
  17929.     MOVE.B    n_cmdlo(A6),D0
  17930.     AND.B    #1,D0
  17931.     ASL.B    #1,D0
  17932.     AND.B    #$FD,$BFE001
  17933.     OR.B    D0,$BFE001
  17934.     RTS    
  17935.  
  17936. SetGlissControl
  17937.     MOVE.B    n_cmdlo(A6),D0
  17938.     AND.B    #$0F,D0
  17939.     AND.B    #$F0,n_glissfunk(A6)
  17940.     OR.B    D0,n_glissfunk(A6)
  17941.     RTS
  17942.  
  17943. SetVibratoControl
  17944.     MOVE.B    n_cmdlo(A6),D0
  17945.     AND.B    #$0F,D0
  17946.     AND.B    #$F0,n_wavecontrol(A6)
  17947.     OR.B    D0,n_wavecontrol(A6)
  17948.     RTS
  17949.  
  17950. SetFineTune
  17951.     MOVE.B    n_cmdlo(A6),D0
  17952.     AND.B    #$0F,D0
  17953.     MOVE.B    D0,n_finetune(A6)
  17954.     RTS
  17955.  
  17956. JumpLoop
  17957.     TST.L    Counter
  17958.     BNE    Return2
  17959.     MOVE.B    n_cmdlo(A6),D0
  17960.     AND.B    #$0F,D0
  17961.     BEQ    SetLoop
  17962.     TST.B    n_loopcount(A6)
  17963.     BEQ    jumpcnt
  17964.     SUB.B    #1,n_loopcount(A6)
  17965.     BEQ    Return2
  17966. jmploop    MOVE.B    n_pattpos(A6),PBreakPosition
  17967.     ST    PBreakFlag
  17968.     RTS
  17969.  
  17970. jumpcnt    MOVE.B    D0,n_loopcount(A6)
  17971.     BRA    jmploop
  17972.  
  17973. SetLoop    MOVE.L    PatternPosition,D0
  17974.     LSR.L    #4,D0
  17975.     AND.B    #63,D0
  17976.     MOVE.B    D0,n_pattpos(A6)
  17977.     RTS
  17978.  
  17979. SetTremoloControl
  17980.     MOVE.B    n_cmdlo(A6),D0
  17981.     AND.B    #$0F,D0
  17982.     LSL.B    #4,D0
  17983.     AND.B    #$0F,n_wavecontrol(A6)
  17984.     OR.B    D0,n_wavecontrol(A6)
  17985.     RTS
  17986.  
  17987. KarplusStrong
  17988.     MOVEM.L    D1-D2/A0-A1,-(SP)
  17989.     MOVE.L    n_loopstart(A6),A0
  17990.     MOVE.L    A0,A1
  17991.     MOVE.W    n_replen(A6),D0
  17992.     ADD.W    D0,D0
  17993.     SUBQ.W    #2,D0
  17994. karplop    MOVE.B    (A0),D1
  17995.     EXT.W    D1
  17996.     MOVE.B    1(A0),D2
  17997.     EXT.W    D2
  17998.     ADD.W    D1,D2
  17999.     ASR.W    #1,D2
  18000.     MOVE.B    D2,(A0)+
  18001.     DBRA    D0,karplop
  18002.     MOVE.B    (A0),D1
  18003.     EXT.W    D1
  18004.     MOVE.B    (A1),D2
  18005.     EXT.W    D2
  18006.     ADD.W    D1,D2
  18007.     ASR.W    #1,D2
  18008.     MOVE.B    D2,(A0)
  18009.     MOVEM.L    (SP)+,D1-D2/A0-A1
  18010.     RTS
  18011.  
  18012. RetrigNote
  18013.     MOVE.L    D1,-(SP)
  18014.     MOVEQ    #0,D0
  18015.     MOVE.B    n_cmdlo(A6),D0
  18016.     AND.B    #$0F,D0
  18017.     BEQ    rtnend
  18018.     MOVE.L    Counter,D1
  18019.     BNE    rtnskp
  18020.     MOVE.W    n_note(A6),D1
  18021.     AND.W    #$0FFF,D1
  18022.     BNE    rtnend
  18023.     MOVE.L    Counter,D1
  18024. rtnskp    DIVU    D0,D1
  18025.     SWAP    D1
  18026.     TST.W    D1
  18027.     BNE    rtnend
  18028. DoRetrg    MOVE.W    n_dmabit(A6),$DFF096    ; Channel DMA off
  18029.     MOVE.L    n_start(A6),(A5)    ; Set sampledata pointer
  18030.     MOVE.W    n_length(A6),4(A5)    ; Set length
  18031.     MOVE.W    n_period(A6),6(A5)
  18032.     MOVEQ    #0,D0
  18033.     MOVE.B    n_volume(A6),D0
  18034. ;    MOVE.W    D0,8(A5)
  18035.     MOVE.W    DMAWait,D0
  18036. rtnloop1
  18037.     DBRA    D0,rtnloop1
  18038.     MOVE.W    n_dmabit(A6),D0
  18039.     BSET    #15,D0
  18040.     MOVE.W    D0,$DFF096
  18041.     MOVE.W    DMAWait,D0
  18042. rtnloop2
  18043.     DBRA    D0,rtnloop2
  18044.     MOVE.L    n_loopstart(A6),(A5)
  18045.     MOVE.L    n_replen(A6),4(A5)
  18046. rtnend    MOVE.L    (SP)+,D1
  18047.     RTS
  18048.  
  18049. VolumeFineUp
  18050.     TST.L    Counter
  18051.     BNE    Return2
  18052.     MOVEQ    #0,D0
  18053.     MOVE.B    n_cmdlo(A6),D0
  18054.     AND.B    #$F,D0
  18055.     BRA    VolSlideUp
  18056.  
  18057. VolumeFineDown
  18058.     TST.L    Counter
  18059.     BNE    Return2
  18060.     MOVEQ    #0,D0
  18061.     MOVE.B    n_cmdlo(A6),D0
  18062.     AND.B    #$0F,D0
  18063.     BRA    VolSlideDown2
  18064.  
  18065. NoteCut    MOVEQ    #0,D0
  18066.     MOVE.B    n_cmdlo(A6),D0
  18067.     AND.B    #$0F,D0
  18068.     CMP.L    Counter,D0
  18069.     BNE    Return2
  18070.     CLR.B    n_volume(A6)
  18071. ;    MOVE.W    #0,8(A5)
  18072.     RTS
  18073.  
  18074. NoteDelay
  18075.     MOVEQ    #0,D0
  18076.     MOVE.B    n_cmdlo(A6),D0
  18077.     AND.B    #$0F,D0
  18078.     CMP.L    Counter,D0
  18079.     BNE    Return2
  18080.     MOVE.W    (A6),D0
  18081.     AND.W    #$0FFF,D0
  18082.     BEQ    Return2
  18083.     MOVE.L    D1,-(SP)
  18084.     BRA    DoRetrg
  18085.  
  18086. PatternDelay
  18087.     TST.L    Counter
  18088.     BNE    Return2
  18089.     MOVEQ    #0,D0
  18090.     MOVE.B    n_cmdlo(A6),D0
  18091.     AND.B    #$0F,D0
  18092.     TST.B    PattDelayTime2
  18093.     BNE    Return2
  18094.     ADDQ.B    #1,D0
  18095.     MOVE.B    D0,PattDelayTime
  18096.     RTS
  18097.  
  18098. FunkIt    TST.L    Counter
  18099.     BNE    Return2
  18100.     MOVE.B    n_cmdlo(A6),D0
  18101.     AND.B    #$0F,D0
  18102.     LSL.B    #4,D0
  18103.     AND.B    #$0F,n_glissfunk(A6)
  18104.     OR.B    D0,n_glissfunk(A6)
  18105.     TST.B    D0
  18106.     BEQ    Return2
  18107. UpdateFunk
  18108.     MOVEM.L    A0/D1,-(SP)
  18109.     MOVEQ    #0,D0
  18110.     MOVE.B    n_glissfunk(A6),D0
  18111.     LSR.B    #4,D0
  18112.     BEQ    funkend
  18113.     LEA    FunkTable(PC),A0
  18114.     MOVE.B    (A0,D0.W),D0
  18115.     ADD.B    D0,n_funkoffset(A6)
  18116.     BTST    #7,n_funkoffset(A6)
  18117.     BEQ    funkend
  18118.     CLR.B    n_funkoffset(A6)
  18119.     MOVE.L    n_loopstart(A6),D0
  18120.     MOVEQ    #0,D1
  18121.     MOVE.W    n_replen(A6),D1
  18122.     ADD.L    D1,D0
  18123.     ADD.L    D1,D0
  18124.     MOVE.L    n_wavestart(A6),A0
  18125.     ADDQ.L    #1,A0
  18126.     CMP.L    D0,A0
  18127.     BLO.S    funkok
  18128.     MOVE.L    n_loopstart(A6),A0
  18129. funkok    MOVE.L    A0,n_wavestart(A6)
  18130.     MOVEQ    #-1,D0
  18131.     SUB.B    (A0),D0
  18132.     MOVE.B    D0,(A0)
  18133. funkend    MOVEM.L    (SP)+,A0/D1
  18134.     RTS
  18135.  
  18136. ;************************* End of Code ******************************
  18137.  
  18138. FunkTable dc.b 0,5,6,7,8,10,11,13,16,19,22,26,32,43,64,128
  18139.  
  18140. VibratoTable    
  18141.     dc.b   0, 24, 49, 74, 97,120,141,161
  18142.     dc.b 180,197,212,224,235,244,250,253
  18143.     dc.b 255,253,250,244,235,224,212,197
  18144.     dc.b 180,161,141,120, 97, 74, 49, 24
  18145.  
  18146. AllRightText    dc.b    'All right',0
  18147. PLSTFullText    dc.b    'Plst is full!',0
  18148. AreYouSureText    dc.b    'Are you sure?',0
  18149. NoDiskInDriveText
  18150.         dc.b    'No disk in df0!',0
  18151. WriteProtectedText
  18152.         dc.b    'Write protected',0
  18153. OprAbortedText    dc.b    'Print aborted!',0
  18154. EnterDataText    dc.b    'Enter data',0
  18155. AddingPathText    dc.b    'Adding path...',0
  18156. DiskErrorText    dc.b    'Disk error !!',0
  18157. LoadingText    dc.b    'Loading...',0
  18158. LoadingSongText    dc.b    'Loading song',0
  18159. LoadingModuleText
  18160.         dc.b    'Loading module',0
  18161. LoadingSampleText
  18162.         dc.b    'Loading sample',0
  18163. SavingText    dc.b    'Saving...',0
  18164. ;SaveSongText    dc.b    'Save song ?',0
  18165. SavingSongText    dc.b    'Saving song',0
  18166. ;SaveModuleText    dc.b    'Save module ?',0
  18167. SavingModuleText
  18168.         dc.b    'Saving module',0
  18169. ;SaveSampleText    dc.b    'Save sample ?',0
  18170. SavingSampleText
  18171.         dc.b    'Saving sample',0
  18172. LoadingPLSTText    dc.b    'Loading plst',0
  18173. SavingPLSTText    dc.b    'Saving plst',0
  18174. DeletingSongText
  18175.         dc.b    'Deleting song',0
  18176. DeletingModuleText
  18177.         dc.b    'Deleting module',0
  18178. DeletingSampleText
  18179.         dc.b    'Deleting sample',0
  18180. RenamingFileText
  18181.         dc.b    'Renaming file',0
  18182. DecrunchingText    dc.b    'Decrunching...',0
  18183. CrunchingText    dc.b    'Crunching...',0
  18184. SelectEntryText    dc.b    'Select entry',0
  18185. SelectSongText    dc.b    'Select song',0
  18186. SelectModuleText
  18187.         dc.b    'Select module',0
  18188. SelectSampleText
  18189.         dc.b    'Select sample',0
  18190. SelectFileText    dc.b    'Select file',0
  18191. ReadingDirText    dc.b    'Reading dir...',0
  18192. PosSetText    dc.b    'Position set',0
  18193. PrintingSongText
  18194.         dc.b    'Printing song',0
  18195. PrintingPLSTText
  18196.         dc.b    'Printing plst',0
  18197.  
  18198. SaveSongText    dc.b    'Save song ?',0
  18199. DeleteSongText    dc.b    'Delete song ?',0
  18200. SaveModuleText    dc.b    'Save module ?',0
  18201. DeleteModuleText dc.b    'Delete module ?',0
  18202. SaveSampleText    dc.b    'Save sample ?',0
  18203. DeleteSampleText dc.b    'Delete sample ?',0
  18204. PrintPLSTText    dc.b    'Print plst ?',0
  18205. PrintSongText    dc.b    'Print song ?',0
  18206. QuitPTText    dc.b    'Really quit ?',0
  18207. UpsampleText    dc.b    'Upsample ?',0
  18208. DownSampleText    dc.b    'Downsample ?',0
  18209. PleaseSelectText dc.b    'Please select',0
  18210. ClearSplitText    dc.b    'Clear split ?',0
  18211. ResetAllText    dc.b    'Reset config ?',0
  18212. DeletePresetText dc.b    'Delete preset ?',0
  18213. LoadPLSTText    dc.b    'Load presetlist?',0
  18214. SavePLSTText    dc.b    'Save presetlist?',0
  18215. KillSampleText    dc.b    'Kill sample ?',0
  18216. AbortLoadText    dc.b    'Abort loading ?',0
  18217. LoadConfigText    dc.b    'Load config ?',0
  18218. SaveConfigText    dc.b    'Save config ?',0
  18219.  
  18220. DiskFormatText    dc.b    'Disk format'
  18221. InProgressText    dc.b    'in progress'
  18222. FormattingCylText
  18223.         dc.b    'Formatting cyl ',0
  18224. VerifyingText    dc.b    'Verifying  cyl ',0
  18225. InitDiskText    dc.b    'Initializing',0
  18226. PlsEntNamText    dc.b    'Please enter name'
  18227. OfVolumeText    dc.b    'of volume:  ST-__',0,0
  18228.     cnop 0,2
  18229. DiskNumText1    dc.b    '0'
  18230. DiskNumText2    dc.b    '0  '
  18231. PEdDefaultPath    dc.b    'df0:',0
  18232.         dcb.b    47,0
  18233.     
  18234. PEdDefaultVol    dc.b    'st-'
  18235. SndDiskNum0    dc.b    '0'
  18236. SndDiskNum1    dc.b    '1:'
  18237.  
  18238. PresetName    dc.b    '      '
  18239. PsetNameText    dc.b    '                '
  18240.         dc.b    ' '
  18241. PsetVolText    dc.b    '  '
  18242.         dc.b    ' '
  18243. PsetLenText    dc.b    '    '
  18244.         dc.b    ' '
  18245. PsetRepeatText    dc.b    '    '
  18246.         dc.b    ' '
  18247. PsetReplenText    dc.b    '    '
  18248.  
  18249. InsertPsetText    dc.b    'ST-01:                  0 0000 0000 0002'
  18250. PsetPLSTtext    dc.b    'No.    Samplename               '
  18251.         dc.b    'Length  Repeat  RepLen',$A,$A
  18252. PsetPrtNumText    dc.b    '    :  '
  18253. PsetPrtNameText    dc.b    '                             '
  18254. PsetPrtLenText    dc.b    '        '
  18255. PsetPrtRepeatText    dc.b    '        '
  18256. PsetPrtRepLenText    dc.b    10
  18257.     dc.b    0
  18258. SongDumpText
  18259.     dc.b    9
  18260.     dc.b    'Protracker Song-Dump -- Made with '
  18261.     dc.b    'Protracker V2.0A  ',$D,$A,$A
  18262.     dc.b    9
  18263.     dc.b    'Songname:  '
  18264. CRLF_Text    dc.b    13,10
  18265. FF_Text        dc.b    12,0
  18266.  
  18267.     cnop 0,2
  18268. PatternNumText    dc.b    9,9,9,'Pattern: '
  18269. PattNumText1    dc.b    '0'
  18270. PattNumText2    dc.b    '0',$D,$A,$D,$A
  18271.  
  18272. PtotText    dc.b    9
  18273. PattXText1    dc.b    "0"
  18274. PattXText2    dc.b    "0 : "
  18275. PpText        dc.b    "                      "
  18276. Prafs        dc.b    "  0000  0000  0000    ",$D,$A
  18277. PnText2        dc.b    "        "
  18278.     cnop 0,2
  18279.         dc.b    0
  18280. PattPosText    dc.b    '00  :                                                       '
  18281. PnText        dc.b    '    ',0
  18282.  
  18283.     cnop 0,2
  18284. FmtSongDirName    dc.b    'DF0:songs',0
  18285. FmtModuleDirName    dc.b    'DF0:modules',0
  18286.  
  18287.     cnop 0,2
  18288. STText1        dc.b    'ST'
  18289. STText1Num    dc.b    '-'
  18290. STText1Number    dc.b    0,0,':'
  18291. STText2        dc.b    'ST'
  18292. STText2Num    dc.b    '-'
  18293. STText2Number    dc.b    0,0,':'
  18294. STText3        dc.b    'ST'
  18295. STText3Num    dc.b    '-'
  18296. STText3Number    dc.b    0,0,':'
  18297.  
  18298. EmptyLineText    dc.b    '                       ',0
  18299.  
  18300. FastHexTable    dc.b    '000102030405060708090A0B0C0D0E0F'
  18301.         dc.b    '101112131415161718191A1B1C1D1E1F'
  18302.         dc.b    '202122232425262728292A2B2C2D2E2F'
  18303.         dc.b    '303132333435363738393A3B3C3D3E3F'
  18304.         dc.b    '404142434445464748494A4B4C4D4E4F'
  18305.         dc.b    '505152535455565758595A5B5C5D5E5F'
  18306.         dc.b    '606162636465666768696A6B6C6D6E6F'
  18307.         dc.b    '707172737475767778797A7B7C7D7E7F'
  18308.         dc.b    '808182838485868788898A8B8C8D8E8F'
  18309.         dc.b    '909192939495969798999A9B9C9D9E9F'
  18310.         dc.b    'A0A1A2A3A4A5A6A7A8A9AAABACADAEAF'
  18311.         dc.b    'B0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF'
  18312.         dc.b    'C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF'
  18313.         dc.b    'D0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF'
  18314.         dc.b    'E0E1E2E3E4E5E6E7E8E9EAEBECEdEEEF'
  18315.         dc.b    'F0F1F2F3F4F5F6F7F8F9FAFBFCFdFEFF'
  18316.  
  18317. TrackdiskName    dc.b    'trackdisk.device',0
  18318. InputDevName    dc.b    'input.device',0
  18319. DOSbase        dc.l    0
  18320. IntuitionBase    dc.l    0
  18321. GfxBase        dc.l    0
  18322.  
  18323. RawKeyHexTable    
  18324.     dc.b    10,1,2,3,4,5,6,7
  18325.     dc.b    8,9,32,53,51,34,18,35
  18326. RawKeyScaleTable    
  18327.     dc.b    49,33,50,34,51,52,36,53,37,54,38,55,56,40,57
  18328.     dc.b    41,58,16,2,17,3,18,19,5,20,6,21,7,22,23,9,24,10
  18329.     dc.b    25,26,12,27,70,70,0
  18330.  
  18331. KbdTransTable1    
  18332.     dc.b     0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16
  18333.     dc.b    12,13,14,15,16,17,18,19,20,21,22,23
  18334.     dc.b    24,25,26,27,28,29,30,31,36,36
  18335. KbdTransTable2
  18336.     dc.b    12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28
  18337.     dc.b    24,25,26,27,28,29,30,31,32,33,34,35
  18338.     dc.b    36,36,36,36,36,36,36,36,36,36
  18339. NoteNames1
  18340.     dc.b    'C-1 C#1 D-1 D#1 E-1 F-1 F#1 G-1 G#1 A-1 A#1 B-1 '
  18341.     dc.b    'C-2 C#2 D-2 D#2 E-2 F-2 F#2 G-2 G#2 A-2 A#2 B-2 '
  18342.     dc.b    'C-3 C#3 D-3 D#3 E-3 F-3 F#3 G-3 G#3 A-3 A#3 B-3 '
  18343. SpcNoteText
  18344.     dc.b    '--- '
  18345. NoteNames2
  18346.     dc.b    'C-1 D¡1 D-1 E¡1 E-1 F-1 G¡1 G-1 A¡1 A-1 B¡1 B-1 '
  18347.     dc.b    'C-2 D¡2 D-2 E¡2 E-2 F-2 G¡2 G-2 A¡2 A-2 B¡2 B-2 '
  18348.     dc.b    'C-3 D¡3 D-3 E¡3 E-3 F-3 G¡3 G-3 A¡3 A-3 B¡3 B-3 '
  18349.     dc.b    '--- '
  18350.  
  18351. PeriodTable
  18352. ; Tuning 0
  18353.     dc.w    856,808,762,720,678,640,604,570,538,508,480,453
  18354.     dc.w    428,404,381,360,339,320,302,285,269,254,240,226
  18355.     dc.w    214,202,190,180,170,160,151,143,135,127,120,113,0
  18356. ; Tuning 1
  18357.     dc.w    850,802,757,715,674,637,601,567,535,505,477,450
  18358.     dc.w    425,401,379,357,337,318,300,284,268,253,239,225
  18359.     dc.w    213,201,189,179,169,159,150,142,134,126,119,113,0
  18360. ; Tuning 2
  18361.     dc.w    844,796,752,709,670,632,597,563,532,502,474,447
  18362.     dc.w    422,398,376,355,335,316,298,282,266,251,237,224
  18363.     dc.w    211,199,188,177,167,158,149,141,133,125,118,112,0
  18364. ; Tuning 3
  18365.     dc.w    838,791,746,704,665,628,592,559,528,498,470,444
  18366.     dc.w    419,395,373,352,332,314,296,280,264,249,235,222
  18367.     dc.w    209,198,187,176,166,157,148,140,132,125,118,111,0
  18368. ; Tuning 4
  18369.     dc.w    832,785,741,699,660,623,588,555,524,495,467,441
  18370.     dc.w    416,392,370,350,330,312,294,278,262,247,233,220
  18371.     dc.w    208,196,185,175,165,156,147,139,131,124,117,110,0
  18372. ; Tuning 5
  18373.     dc.w    826,779,736,694,655,619,584,551,520,491,463,437
  18374.     dc.w    413,390,368,347,328,309,292,276,260,245,232,219
  18375.     dc.w    206,195,184,174,164,155,146,138,130,123,116,109,0
  18376. ; Tuning 6
  18377.     dc.w    820,774,730,689,651,614,580,547,516,487,460,434
  18378.     dc.w    410,387,365,345,325,307,290,274,258,244,230,217
  18379.     dc.w    205,193,183,172,163,154,145,137,129,122,115,109,0
  18380. ; Tuning 7
  18381.     dc.w    814,768,725,684,646,610,575,543,513,484,457,431
  18382.     dc.w    407,384,363,342,323,305,288,272,256,242,228,216
  18383.     dc.w    204,192,181,171,161,152,144,136,128,121,114,108,0
  18384. ; Tuning -8
  18385.     dc.w    907,856,808,762,720,678,640,604,570,538,508,480
  18386.     dc.w    453,428,404,381,360,339,320,302,285,269,254,240
  18387.     dc.w    226,214,202,190,180,170,160,151,143,135,127,120,0
  18388. ; Tuning -7
  18389.     dc.w    900,850,802,757,715,675,636,601,567,535,505,477
  18390.     dc.w    450,425,401,379,357,337,318,300,284,268,253,238
  18391.     dc.w    225,212,200,189,179,169,159,150,142,134,126,119,0
  18392. ; Tuning -6
  18393.     dc.w    894,844,796,752,709,670,632,597,563,532,502,474
  18394.     dc.w    447,422,398,376,355,335,316,298,282,266,251,237
  18395.     dc.w    223,211,199,188,177,167,158,149,141,133,125,118,0
  18396. ; Tuning -5
  18397.     dc.w    887,838,791,746,704,665,628,592,559,528,498,470
  18398.     dc.w    444,419,395,373,352,332,314,296,280,264,249,235
  18399.     dc.w    222,209,198,187,176,166,157,148,140,132,125,118,0
  18400. ; Tuning -4
  18401.     dc.w    881,832,785,741,699,660,623,588,555,524,494,467
  18402.     dc.w    441,416,392,370,350,330,312,294,278,262,247,233
  18403.     dc.w    220,208,196,185,175,165,156,147,139,131,123,117,0
  18404. ; Tuning -3
  18405.     dc.w    875,826,779,736,694,655,619,584,551,520,491,463
  18406.     dc.w    437,413,390,368,347,328,309,292,276,260,245,232
  18407.     dc.w    219,206,195,184,174,164,155,146,138,130,123,116,0
  18408. ; Tuning -2
  18409.     dc.w    868,820,774,730,689,651,614,580,547,516,487,460
  18410.     dc.w    434,410,387,365,345,325,307,290,274,258,244,230
  18411.     dc.w    217,205,193,183,172,163,154,145,137,129,122,115,0
  18412. ; Tuning -1
  18413.     dc.w    862,814,768,725,684,646,610,575,543,513,484,457
  18414.     dc.w    431,407,384,363,342,323,305,288,272,256,242,228
  18415.     dc.w    216,203,192,181,171,161,152,144,136,128,121,114,0
  18416.  
  18417. CursorPosTable    
  18418.     dc.b    3,6,7,8,9,10,12
  18419.     dc.b    15,16,17,18,19,21
  18420.     dc.b    24,25,26,27,28,30
  18421.     dc.b    33,34,35,36,37
  18422. UnshiftedKeymap
  18423.     dc.b    '`1234567890-=\*0'
  18424.     dc.b    'qwertyuiop[]*123'
  18425.     dc.b    'asdfghjkl;',39,'#',0,'456'
  18426.     dc.b    '<zxcvbnm,./',0,'.','789 '
  18427. ShiftedKeymap
  18428.     dc.b    '~!@#$%^&*()_+|*0'
  18429.     dc.b    'qwertyuiop{}*123'
  18430.     dc.b    'asdfghjkl:',34,'^',0,'456'
  18431.     dc.b    '>zxcvbnm<>?',0,'.','789 '
  18432.  
  18433. SongNumOfPatt    dc.w    1
  18434. NoteNamesPtr    dc.l    0
  18435. SpritePtrsPtr    dc.l    0
  18436. LineCurPosPtr    dc.l    0
  18437. NoSpritePtr    dc.l    0
  18438. CursorPosPtr    dc.l    0
  18439. Ch1SpritePtr    dc.l    0
  18440. Ch2SpritePtr    dc.l    0
  18441. Ch3SpritePtr    dc.l    0
  18442. Ch4SpritePtr    dc.l    0
  18443. PPattPos    dc.l    0
  18444. SaveEditMode    dc.l    0
  18445. EditMode    dc.l    0
  18446. RunMode        dc.l    0
  18447. CurrCmds    dc.l    0
  18448. TextBplPtr    dc.l    0
  18449. TextOffset    dc.w    0
  18450. TextLength    dc.w    0
  18451. TextLenTemp    dc.l    0
  18452. ShowTextPtr    dc.l    0
  18453. PatternNumber    dc.l    0
  18454. CurrPos        dc.l    0
  18455. CurrSpeed    dc.l    0
  18456. KeyTransTabPtr    dc.l    0
  18457. CmdOffset    dc.w    0
  18458. RawKeyCode    dc.b    0
  18459. PattRfsh    dc.b    0
  18460. MountFlag    dc.w    0
  18461. GetlineFlag    dc.w    0
  18462. LoadInProgress    dc.w    0
  18463. KbIntSave    dc.l    0
  18464. KbIntSavePtr    dc.l    0
  18465. CurrentPlayNote    dc.w    214
  18466. LineCurX    dc.w    0
  18467. LineCurY    dc.w    0
  18468. TextEndPtr    dc.l    0
  18469. ScrPattPos    dc.w    0
  18470. PattCurPos    dc.w    0
  18471. GadgRepeat    dc.w    0
  18472. WordNumber    dc.w    0
  18473. HighPattNum    dc.w    0
  18474. InsNum    dc.w    0
  18475. LastInsNum    dc.w    1
  18476. PlayInsNum    dc.w    1
  18477. HiLowInstr    dc.w    0
  18478. PEDpos        dc.w    0
  18479. PLSTpos        dc.w    0
  18480. MaxPLSTOffset    dc.l    0
  18481. PresetMarkTotal    dc.w    0
  18482. PLSTOffset    dcb.b    14*4,0
  18483. CurrentPreset    dc.w    1
  18484. UpOrDown    dc.w    0
  18485. Joy0Low        dc.w    0
  18486. Joy0High    dc.w    0
  18487. MouseX    dc.w    0
  18488. MouseY    dc.w    0
  18489. MouseX2    dc.w    0
  18490. MouseY2    dc.w    0
  18491. MouseX3    dc.w    0
  18492. MouseY3    dc.w    0
  18493. DecompMemPtr    dc.l    0
  18494. DecompMemSize    dc.l    0
  18495.  
  18496. SampleInfo    dc.w    0
  18497. si_volume    dc.w    0
  18498. si_long        dc.l    0
  18499. si_pointer    dc.l    0,0,0,0,0
  18500. SampleInfo2    dc.w    0
  18501. si_volume2    dc.w    0
  18502. si_long2    dc.l    0
  18503. si_pointer2    dc.l    0,0,0,0,0
  18504.  
  18505. LongFFFF    dc.l    0
  18506. PosJumpAssert    dc.b    0
  18507. PBreakPosition    dc.b    0
  18508. PBreakFlag    dc.b    0
  18509. LEDStatus    dc.b    0
  18510. PattDelayTime    dc.b    0
  18511. PattDelayTime2    dc.b    0
  18512. PattRfshNum    dc.l    0
  18513. DidQuantize    dc.w    0
  18514. MessagePtr    dc.l    0
  18515. FileNamePtr    dc.l    0
  18516. DiskDataPtr    dc.l    0
  18517. FileHandle    dc.l    0
  18518. DiskDataLength    dc.l    0
  18519. LowMask        dc.b    $FF
  18520. PatternPosition    dc.l    0
  18521. SongPosition    dc.l    0
  18522. Counter        dc.l    0
  18523. PatternPtr    dc.l    0
  18524. SongDataPtr    dc.l    0
  18525. SampleStarts    dcb.l    31,0
  18526. SamplePtrs    EQU    SampleStarts-4
  18527. SampleLengths    dcb.l    32,0
  18528. DMACONtemp    dc.w    0
  18529. StackSave    dc.l    0
  18530. InputDevMouse    dc.l    0,0,0
  18531. AnalyzerHeights    dcb.w    23,0
  18532. AnalyzerOpplegg    dcb.w    23,0
  18533. Action        dc.w    0
  18534. PathPtr        dc.l    0
  18535. FileLock    dc.l    0
  18536. CurrScreen    dc.w    0
  18537. SaveCurrScreen    dc.w    0
  18538. PointerCol1Save    dc.w    0
  18539. PointerCol2Save    dc.w    0
  18540. PointerCol3Save    dc.w    0
  18541. GetDecTemp    dc.b    0
  18542. UpdateTempo    dc.b    0
  18543. MoreInstrFlag    dc.w    0
  18544. SampleSortList    dcb.l    32,0
  18545. PLSTmem        dc.l    0
  18546. PresetTotal    dc.w    0
  18547. SaveScope    dc.b    0
  18548.         dc.b    0 ;free 0
  18549. DisableAnalyzer    dc.b    0
  18550. SaveDA        dc.b    0
  18551. AutoReqRunning    dc.b    0
  18552. NoSampleInfo    dc.b    0
  18553. FormatDataPtr    dc.l    0
  18554. CylinderNumber    dc.w    0
  18555. TrackdiskPort    dc.l    0,0,0,0
  18556. ProcessPtr    dc.l    0,0,0,0
  18557. DateStamp    dc.l    0,0,0,0
  18558. EnterTextFlag    dc.w    0
  18559. PresetLength    dc.w    0
  18560. PresetFineTune    dc.w    0
  18561. PresetRepeat    dc.w    0
  18562. PresetReplen    dc.w    0
  18563. PED_Action    dc.w    0
  18564. PsetNumTemp    dc.w    0
  18565. PsetPtrTemp    dc.l    0
  18566. FreeDiskSpace    dc.l    0
  18567. SplitAddress    dc.l    0
  18568. LaHeTx        dc.l    $12345678
  18569. PLSTallocsize    dc.l    0
  18570. MaxPLSTEntries2    dc.w    0
  18571.  
  18572. ;---- Setup Data ----
  18573.  
  18574. DefaultSetupData
  18575.     dc.b    'PT2.0 Configuration File',$A,0
  18576.     dc.b    'ST-00:songs'
  18577.     dcb.b    21,0
  18578.     dc.b    'ST-00:modules'
  18579.     dcb.b    19,0
  18580.     dc.b    'DF0:'
  18581.     dcb.b    28,0
  18582.     dc.b    'PRT:'
  18583.     dcb.b    28,0
  18584. DefCol    dc.w    $000,$BBB,$888,$555,$FD0,$D04,$000,$34F
  18585.     dc.b    1   ; Song Pack Mode
  18586.     dc.b    0   ; Module Pack Mode
  18587.     dc.b    0   ; Split  0=off, 1=on
  18588.     dc.b    0   ; Filter
  18589.     dc.b    0   ; TransDel
  18590.     dc.b    1   ; ShowDec
  18591.     dc.b    1   ; AutoDir
  18592.     dc.b    1   ; AutoExit
  18593.     dc.b    1   ; ModOnly
  18594.     dc.b    0   ; MIDI
  18595.     dc.b    1,$18,$18,0    ; SplitData
  18596.     dc.b    2,$1A,$18,0
  18597.     dc.b    3,$1C,$18,0
  18598.     dc.b    4,$1D,$18,0
  18599.     dc.w    20,2    ; KeyRepDelay/Speed
  18600.     dc.b    0    ; Accidental
  18601.     dc.b    0    ; not in use
  18602.     dc.b    'newshell',0    ; ExtCmd 0
  18603.     dcb.b    23,0
  18604.     dc.b    'add21k',0    ; ExtCmd 1
  18605.     dcb.b    25,0
  18606.     dc.b    'info',0    ; ExtCmd 2
  18607.     dcb.b    27,0
  18608.     dc.b    'list',0    ; ExtCmd 3
  18609.     dcb.b    27,0
  18610.     dc.b    'loadwb -debug',0 ; ExtCmd 4
  18611.     dcb.b    18,0
  18612.     dc.b    'diskmaster1.3',0 ; ExtCmd 5
  18613.     dcb.b    18,0
  18614.     dc.b    'run AudioMasterIII',0 ; ExtCmd 6
  18615.     dcb.b    13,0
  18616.     dc.b    'ced',0    ; ExtCmd 7
  18617.     dcb.b    28,0
  18618.     dc.w    0    ; Not in use
  18619.     dc.w    2500    ; Max PLST Entries
  18620.     dc.b    2,3,4,1    ; Multi Mode Next
  18621.     dc.w    $102,$202,$037,$047,$304, $F06,$C10,$C20,$E93,$A0F
  18622.     dc.b    0 ; RAW/IFF Save, 0=RAW, 1=IFF
  18623.     dc.b    1 ; IntMode, 0=VBLANK, 1=CIA
  18624.     dc.b    0 ; Override
  18625.     dc.b    0 ; Nosamples
  18626.     dc.b    0 ; BlankZero
  18627.     dc.b    1 ; ShowDirs
  18628.     dc.b    0 ; CutToBuf
  18629.     dc.b    0 ; ShowPublic
  18630.     dc.b    1 ; IFFLoop
  18631.     dc.b    0 ; HHFlag
  18632.     dc.w    125 ; Tempo
  18633.     dc.w    300 ; DMAWait
  18634.     dc.w    24  ; TuneNote (C-3)
  18635.     dc.w    $20 ; TToneVol
  18636.     dc.b    0,0,0,0,0,0,0,0 ; (Pad to 512 bytes)
  18637.     dc.b    "ST-00:" ; Protracker Path
  18638.     dcb.b    26
  18639.     dc.w    6 ; DefaultSpeed
  18640.     dc.w    $0F00,$0F00,$0F10,$0F10,$0F20,$0F20,$0F30,$0F30 ; VU-Meter
  18641.     dc.w    $0F40,$0F50,$0F60,$0F70,$0F80,$0F90,$0FA0,$0FB0 ; colors
  18642.     dc.w    $0FC0,$0FD0,$0FE0,$0FF0,$0FF0,$0EF0,$0EF0,$0DF0
  18643.     dc.w    $0DF0,$0CF0,$0CF0,$0BF0,$0BF0,$0AF0,$09F0,$09F0
  18644.     dc.w    $08F0,$08F0,$07F0,$07F0,$06F0,$06F0,$05F0,$05F0
  18645.     dc.w    $04F0,$04F0,$03F0,$03F0,$02F0,$01F0,$00F0,$00E0
  18646.  
  18647.     dc.w    $0F00,$0F10,$0F20,$0F30,$0F40,$0F50,$0F60,$0F70 ; Analyzer
  18648.     dc.w    $0F80,$0F90,$0FA0,$0FB0,$0FC0,$0FD0,$0FE0,$0FF0 ; colors
  18649.     dc.w    $0EF0,$0DF0,$0CF0,$0BF0,$0AF0,$09F0,$08F0,$07F0
  18650.     dc.w    $06F0,$05F0,$04F0,$03F0,$02F0,$01F0,$00F0,$00E0
  18651.     dc.w    $00D0,$00C0,$00B0,$00A0,$0090,$0080,$0070,$0060
  18652.     dcb.b    302  ; Pad to 1024 bytes
  18653.  
  18654. ;---- Sampler routines ----
  18655.  
  18656. _custom    EQU    $00DFF000
  18657. intreq    EQU    $0000009C
  18658. intreqr    EQU    $0000001E
  18659. intena    EQU    $0000009A
  18660. joy0dat    EQU    $0000000A
  18661. vhposr    EQU    $00000006
  18662. dmacon    EQU    $00000096
  18663. dmaconr    EQU    $00000002
  18664.  
  18665. SamInfoPtr    dc.l    0
  18666. SamInfoLen    dc.l    0
  18667. SampleNote    dc.w    24 ; C-3
  18668. ResampleNote    dc.w    24 ; C-3
  18669. SamIntSave    dc.w    0
  18670. SamDMASave    dc.w    0
  18671.  
  18672. ClearTempSampArea
  18673.     LEA    TempSampArea,A0
  18674.     MOVE.W    #379,D0
  18675.     MOVEQ    #0,D1
  18676. ctsalop    MOVE.W    D1,(A0)+
  18677.     DBRA    D0,ctsalop
  18678.     RTS
  18679.  
  18680. Sampler    CLR.B    RawKeyCode
  18681.     BSR    StopIt
  18682.     JSR    TopExit
  18683.     JSR    WaitForButtonUp
  18684.     JSR    SetWaitPtrCol
  18685.     BSR    ShowMon
  18686.     JSR    Wait_4000
  18687.     JSR    ClearRightArea
  18688.     JSR    ClearAnalyzerColors
  18689.     BSR    ClearTempSampArea
  18690.     BSR    WaitForDiskDrive
  18691.     MOVE.W    $DFF01C,SamIntSave ; intenar
  18692.     MOVE.W    #$7FFF,_custom+intena
  18693.     JSR    TurnOffVoices
  18694.     MOVE.W    SampleNote,D0
  18695.     ASL.W    #1,D0
  18696.     LEA    PeriodTable,A0
  18697.     MOVE.W    (A0,D0.W),D0
  18698.     LSR.W    #1,D0
  18699.     LEA    $00DFF000,A0
  18700.     LEA    $AA(A0),A5
  18701.     LEA    $BA(A0),A6
  18702.     MOVE.W    D0,$A6(A0)
  18703.     MOVE.W    D0,$B6(A0)
  18704.     MOVEQ.L    #$20,D0
  18705.     MOVE.W    D0,$A8(A0)
  18706.     MOVE.W    D0,$B8(A0)
  18707.     MOVEQ.L    #0,D0
  18708.     MOVE.W    D0,(A5)
  18709.     MOVE.W    D0,(A6)
  18710.     MOVE.B    #6,$00BFD200
  18711.     MOVEQ.L    #2,D0
  18712.     MOVE.B    D0,$00BFD000
  18713.     MOVE.B    #0,$00BFE301
  18714.     LEA    GraphOffsets(PC),A0
  18715.     LEA    TempSampArea,A1
  18716.     MOVE.L    TextBplPtr,A2
  18717.     LEA    $09E8-40(A2),A2
  18718.     LEA    $00BFE101,A3
  18719.     LEA    _custom+intreqr,A4
  18720.     MOVE.W    #$0180,D7
  18721.     MOVEQ.L    #6,D6
  18722.     MOVEQ.L    #10,D3
  18723. monilop2
  18724.     MOVEQ.L    #22,D5
  18725. monilop4
  18726.     MOVEQ.L    #7,D4
  18727. monilop3
  18728.     BTST    D7,(A4)
  18729.     BEQ.S    monilop3
  18730.     MOVE.W    D7,$7E(A4)
  18731.     MOVEQ.L    #0,D0
  18732.     MOVE.B    (A3),D0
  18733.     MOVE.W    D0,D1
  18734.     SUB.B    D7,D0
  18735.     MOVE.B    D0,(A5)
  18736.     MOVE.B    D0,(A6)
  18737.     LSR.W    #3,D1
  18738.     ADD.W    D1,D1
  18739.     MOVE.W    0(A0,D1.W),D0
  18740.     MOVE.W    (A1),D1
  18741.     MOVE.W    D0,(A1)+
  18742.     BCLR    D4,0(A2,D1.W)
  18743.     BSET    D4,0(A2,D0.W)
  18744.     DBRA    D4,monilop3
  18745.     ADDQ.L    #1,A2
  18746.     DBRA    D5,monilop4
  18747.     SUB.L    #23,A2
  18748.     SUB.L    #368,A1
  18749.     BTST    D6,-$0100(A3)
  18750.     BEQ    sampexit
  18751.     BTST    D3,-8(A4)
  18752.     BNE.S    monilop2
  18753.  
  18754. ;-- start sampling --
  18755.  
  18756.     MOVE.W    InsNum(PC),D1
  18757.     BEQ    sampexit
  18758.     LSL.W    #2,D1
  18759.     LEA    SamplePtrs,A0
  18760.     MOVE.L    (A0,D1.W),D0
  18761.     BEQ.S    samaok
  18762.     CLR.L    (A0,D1.W)
  18763.     MOVE.L    D0,A1
  18764.     MOVE.L    124(A0,D1.W),D0
  18765.     BEQ.S    samaok
  18766.     CLR.L    124(A0,D1.W)
  18767.     MOVE.L    4.W,A6
  18768.     JSR    LVOFreeMem(A6)
  18769. samaok    MOVE.L    #$FFFE,D6    ; try 64k
  18770. samalclop
  18771.     MOVE.L    D6,D0
  18772.     MOVE.L    #MEMF_CHIP!MEMF_CLEAR,D1
  18773.     MOVE.L    4.W,A6
  18774.     JSR    LVOAllocMem(A6)
  18775.     TST.L    D0
  18776.     BNE.S    samalcok
  18777.     SUB.L    #2048,D6    ; try 2k less
  18778.     BPL.S    samalclop
  18779.     BSR    OutOfMemErr
  18780.     BRA    sampexit
  18781.  
  18782. samalcok
  18783.     MOVE.W    InsNum(PC),D1
  18784.     LSL.W    #2,D1
  18785.     LEA    SamplePtrs(PC),A0
  18786.     MOVE.L    D0,(A0,D1.W)
  18787.     MOVE.L    D6,124(A0,D1.W)
  18788.  
  18789.     MOVE.W    $DFF002,SamDMASave
  18790.     MOVE.W    #$03FF,_custom+dmacon
  18791.     BSR    GetSampleInfo
  18792.     MOVE.L    SamInfoLen,D4
  18793.     CLR.W    $DFF100
  18794.     CLR.W    $DFF180
  18795.     MOVE.L    SamInfoPtr,A1
  18796.     LEA    _custom+intreq,A2
  18797.     LEA    $00BFE101,A3 ; parallel port
  18798.     LEA    _custom+intreqr,A4
  18799.     LEA    $DFF0BA,A6
  18800.  
  18801.     MOVE.W    #$0180,D7
  18802.     MOVEQ.L    #6,D6
  18803.     MOVEQ.L    #0,D5
  18804. samploop
  18805.     BTST    D7,(A4)
  18806.     BEQ.S    samploop
  18807.     MOVE.W    D7,(A2)
  18808.     MOVE.B    (A3),D0
  18809.     SUB.B    D7,D0
  18810.     MOVE.B    D0,(A5)
  18811.     MOVE.B    D0,(A6)
  18812.     MOVE.B    D0,(A1)+
  18813.     ADDQ.W    #1,D5
  18814.     CMP.W    D4,D5
  18815.     BEQ.S    sampend
  18816.     BTST    D6,-$0100(A3)
  18817.     BNE.S    samploop
  18818. sampend    MOVE.W    SamDMASave,D0
  18819.     OR.W    #$8000,D0
  18820.     MOVE.W    D0,$00DFF096
  18821.  
  18822.     MOVE.L    A1,D0
  18823.     SUB.L    SamInfoPtr(PC),D0
  18824.     MOVE.L    D0,SamInfoLen
  18825.  
  18826.     MOVE.L    SongDataPtr(PC),A0
  18827.     MOVE.W    InsNum(PC),D1
  18828.     MULU    #30,D1
  18829.     LEA    12(A0,D1.W),A0
  18830.     MOVE.L    SamInfoLen(PC),D0
  18831.     LSR.L    #1,D0
  18832.     MOVE.W    D0,(A0)+
  18833.     MOVE.W    #$0040,(A0)+
  18834.     CLR.W    (A0)+
  18835.     MOVE.W    #1,(A0)
  18836.  
  18837.     MOVE.L    SamInfoLen(PC),D1
  18838.     NEG.L    D1
  18839.     AND.L    #$FFFFFFF8,D1
  18840.     NEG.L    D1
  18841.     MOVE.W    InsNum(PC),D0
  18842.     ASL.W    #2,D0
  18843.     LEA    SamplePtrs,A0
  18844.     CMP.L    124(A0,D0.W),D1
  18845.     BGE.S    sampexit
  18846.     MOVE.L    124(A0,D0.W),D2
  18847.     MOVE.L    D1,124(A0,D0.W)
  18848.     SUB.L    D1,D2
  18849.     MOVE.L    0(A0,D0.W),A1
  18850.     MOVE.L    124(A0,D0.W),D0
  18851.     ADD.L    D0,A1
  18852.     MOVE.L    D2,D0
  18853.     MOVE.L    4.W,A6
  18854.     JSR    LVOFreeMem(A6)
  18855. sampexit
  18856.     MOVE.W    SamIntSave,D0
  18857.     BSET    #15,D0
  18858.     MOVE.W    D0,$DFF09A
  18859.     JSR    TurnOffVoices
  18860.     JSR    DisplayMainScreen
  18861.     BSR    ClearSamStarts
  18862.     BSR    ShowSampleInfo
  18863.     BSR    RedrawSample
  18864.     JSR    WaitForButtonUp
  18865.     CLR.W    KeyBufPos
  18866.     CLR.B    RawKeyCode
  18867.     CLR.W    ShiftKeyStatus
  18868.     JMP    Wait_4000
  18869.  
  18870. SampleNullInfo
  18871.     CLR.L    SamInfoPtr
  18872.     CLR.L    SamInfoLen
  18873.     MOVEQ    #-1,D0
  18874.     RTS    
  18875.  
  18876. GetSampleInfo
  18877.     MOVE.W    InsNum(PC),D0
  18878.     BEQ.S    SampleNullInfo
  18879.     LSL.W    #2,D0
  18880.     LEA    SamplePtrs(PC),A0
  18881.     MOVE.L    (A0,D0.W),SamInfoPtr
  18882.     MOVE.L    124(A0,D0.W),SamInfoLen
  18883.     MOVEQ    #0,D0
  18884.     RTS
  18885.  
  18886. ShowMon    SF    ScopeEnable
  18887.     ST    DisableAnalyzer
  18888.     JSR    ClearRightArea
  18889.     LEA    MonitorData,A0
  18890.     MOVE.L    #MonitorSize,D0
  18891.     MOVEQ    #-1,D4
  18892.     JMP    cgjojo
  18893.  
  18894. WaitForDiskDrive
  18895.     JSR    StorePtrCol
  18896.     MOVE.L    4.W,A6
  18897.     LEA    $15E(A6),A0    ; DeviceList
  18898.     LEA    TrackdiskName,A1    ; trackdisk.device
  18899.     JSR    LVOFindName(A6)
  18900.     MOVE.L    D0,A6
  18901.     LEA    $24(A6),A6    ; dn_GlobalVec
  18902. trdloop2
  18903.     MOVE.L    A6,A1
  18904.     MOVEQ.L    #3,D6
  18905. tdrloop    TST.L    (A1)+
  18906.     BEQ.S    tdrskip
  18907.     MOVE.L    -4(A1),A2
  18908.     BTST    #7,$0041(A2)
  18909.     BEQ.S    tdrnotset
  18910. tdrskip    DBRA    D6,tdrloop
  18911.     JMP    RestorePtrCol
  18912.  
  18913. tdrnotset
  18914.     JSR    SetDiskPtrCol
  18915.     BRA.S    trdloop2
  18916.  
  18917. ClearSamStarts
  18918.     LEA    SamplePtrs+4,A0
  18919.     MOVEQ    #30,D0
  18920. cssLoop    MOVE.L    (A0)+,D1
  18921.     BEQ    cssSkip
  18922.     MOVE.L    D1,A1
  18923.     CLR.W    (A1)
  18924. cssSkip    DBRA    D0,cssLoop
  18925.     RTS
  18926.  
  18927. GraphOffsets
  18928.     dc.w 31*40,30*40,29*40,28*40,27*40,26*40,25*40,24*40
  18929.     dc.w 23*40,22*40,21*40,20*40,19*40,18*40,17*40,16*40
  18930.     dc.w 15*40,14*40,13*40,12*40,11*40,10*40,09*40,08*40
  18931.     dc.w 07*40,06*40,05*40,04*40,03*40,02*40,01*40,00*40
  18932.  
  18933. SamNoteType    dc.w    0
  18934.  
  18935. ShowSamNote
  18936.     TST.W    SamScrEnable
  18937.     BEQ    Return2
  18938.     MOVE.L    NoteNamesPtr,A4
  18939.     MOVE.W    #237*40+36,TextOffset
  18940.     MOVE.W    SampleNote,D0
  18941.     LSL.W    #2,D0
  18942.     LEA    (A4,D0.W),A0
  18943.     MOVE.L    A0,ShowTextPtr
  18944.     MOVE.W    #4,TextLength
  18945.     BRA    ShowText
  18946.  
  18947. ShowResamNote
  18948.     TST.W    SamScrEnable
  18949.     BEQ    Return2
  18950.     MOVE.L    NoteNamesPtr,A4
  18951.     MOVE.W    #248*40+36,TextOffset
  18952.     MOVE.W    ResampleNote,D0
  18953.     LSL.W    #2,D0
  18954.     LEA    (A4,D0.W),A0
  18955.     MOVE.L    A0,ShowTextPtr
  18956.     MOVE.W    #4,TextLength
  18957.     BRA    ShowText
  18958.  
  18959. ;---- Graphics Data ----
  18960.  
  18961. FontSize    = 568
  18962. SpectrumAnaSize    = 808
  18963. ScopeSize    = 1814
  18964. SureBoxSize    = 1100
  18965. ClearBoxSize    = 1100
  18966. FormatBoxSize    = 1412
  18967. DirScreenSize    = 2861
  18968. PLSTSize    = 1728-8
  18969. Edit1Size    = 1748
  18970. Edit2Size    = 1902
  18971. Edit3Size    = 2145
  18972. SetupScreenSize    = 5468
  18973. Setup2Size    = 5074
  18974. PresetEdSize    = 5161
  18975. SampScreenSize  = 3843
  18976. MonitorSize    = 817
  18977. HelpScreenSize    = 900
  18978.  
  18979. FontData    INCBIN "raw/ptfont.raw"
  18980.     cnop 0,2
  18981. SpectrumAnaData    INCBIN "pak/ptspectrumana.pak"
  18982.     cnop 0,2
  18983. ScopeData    INCBIN "pak/ptscope.pak"
  18984.     cnop 0,2
  18985. SureBoxData    INCBIN "raw/ptsurebox.raw"
  18986.     cnop 0,2
  18987. ClearBoxData    INCBIN "raw/ptclearbox.raw"
  18988.     cnop 0,2
  18989. FormatBoxData    INCBIN "raw/ptformatbox.raw"
  18990.     cnop 0,2
  18991. DirScreenData    INCBIN "pak/ptfilereq.pak"
  18992.     cnop 0,2
  18993. PLSTData    INCBIN "pak/ptplst.pak"
  18994.     cnop 0,2
  18995. Edit1Data    INCBIN "pak/ptedit1.pak"
  18996.     cnop 0,2
  18997. Edit2Data    INCBIN "pak/ptedit2.pak"
  18998.     cnop 0,2
  18999. Edit3Data    INCBIN "pak/ptedit3.pak"
  19000.     cnop 0,2
  19001. SetupScreenData    INCBIN "pak/ptsetup.pak"
  19002.     cnop 0,2
  19003. Setup2Data    INCBIN "pak/ptsetup2.pak"
  19004.     cnop 0,2
  19005. PresetEdData    INCBIN "pak/ptpreseted.pak"
  19006.     cnop 0,2
  19007. SampScreenData    INCBIN "pak/ptsampler.pak"
  19008.     cnop 0,2
  19009. MonitorData    INCBIN "pak/ptmonitor.pak"
  19010.     cnop 0,2
  19011. HelpScreenData    INCBIN "pak/pthelpscreen.pak"
  19012.     cnop 0,2
  19013. VolBoxData    INCBIN "raw/ptvolbox.raw"
  19014. ToggleONdata    INCBIN "raw/PTToggleON.raw"
  19015. ToggleOFFdata    INCBIN "raw/PTToggleOFF.raw"
  19016. S_BoxData    INCBIN "raw/PTLetters.raw"
  19017.  
  19018. A_BoxData    EQU    S_BoxData+22
  19019. T_BoxData    EQU    S_BoxData+44
  19020. P_BoxData    EQU    S_BoxData+66
  19021. H_BoxData    EQU    S_BoxData+88
  19022. C_BoxData    EQU    S_BoxData+110
  19023.  
  19024.  
  19025. ;************************** CHIP DATA HUNK **************************
  19026.  
  19027.     SECTION ptdata,DATA_C
  19028.  
  19029. BitplaneData    INCBIN "raw/PTMainScreen.raw"
  19030.  
  19031. TopMenusPos    EQU    BitPlaneData+55
  19032. SpectrumAnaPos    EQU    BitPlaneData+1815
  19033. FormatBoxPos    EQU    BitPlaneData+2090
  19034. SureBoxPos    EQU    BitPlaneData+2100
  19035. SamScrPos    EQU    BitPlaneData+4880
  19036. VolBoxPos    EQU    BitPlaneData+6209
  19037.  
  19038. TToneData    ; Tuning Tone (Sine Wave)
  19039.     dc.b    0,  25,  49,  71,  91, 106, 118, 126
  19040.     dc.b  127, 126, 118, 106,  91,  71,  49,  25
  19041.     dc.b    0, -25, -49, -71, -91,-106,-118,-126
  19042.     dc.b -127,-126,-118,-106, -91, -71, -49, -25
  19043.  
  19044. CopList    dc.w    $0120    ; Sprite 0 high
  19045.     dc.w    0
  19046.     dc.w    $0122    ; Sprite 0 low
  19047.     dc.w    0
  19048.     dc.w    $0124    ; Sprite 1 high
  19049.     dc.w    0
  19050.     dc.w    $0126    ; Sprite 1 low
  19051.     dc.w    0
  19052.     dc.w    $0128    ; Sprite 2 high
  19053.     dc.w    0
  19054.     dc.w    $012A    ; Sprite 2 low
  19055.     dc.w    0
  19056.     dc.w    $012C    ; Sprite 3 high
  19057.     dc.w    0
  19058.     dc.w    $012E    ; Sprite 3 low
  19059.     dc.w    0
  19060.     dc.w    $0130    ; Sprite 4 high
  19061.     dc.w    0
  19062.     dc.w    $0132    ; Sprite 4 low
  19063.     dc.w    0
  19064.     dc.w    $0134    ; Sprite 5 high
  19065.     dc.w    0
  19066.     dc.w    $0136    ; Sprite 5 low
  19067.     dc.w    0
  19068.     dc.w    $0138    ; Sprite 6 high
  19069.     dc.w    0
  19070.     dc.w    $013A    ; Sprite 6 low
  19071.     dc.w    0
  19072.     dc.w    $013C    ; Sprite 7 high
  19073.     dc.w    0
  19074.     dc.w    $013E    ; Sprite 7 low
  19075.     dc.w    0
  19076. CopListBitplanes
  19077.     dc.w    $00E0    ; Bitplane 0 high
  19078.     dc.w    0
  19079.     dc.w    $00E2    ; Bitplane 0 low
  19080.     dc.w    0
  19081.     dc.w    $00E4    ; Bitplane 1 high
  19082.     dc.w    0
  19083.     dc.w    $00E6    ; Bitplane 1 low
  19084.     dc.w    0
  19085.     dc.w    $00E8    ; Bitplane 2 high
  19086. NoteBplptrHigh
  19087.     dc.w    0
  19088.     dc.w    $00EA    ; Bitplane 2 low
  19089. NoteBplptrLow
  19090.     dc.w    0
  19091. CopListColors
  19092.     dc.w    $01A2    ; Color 17
  19093.     dc.w    $0AAA
  19094.     dc.w    $01A4    ; Color 18
  19095.     dc.w    $0888
  19096.     dc.w    $01A6    ; Color 19
  19097.     dc.w    $0666
  19098.     dc.w    $01A0    ; Color 16
  19099.     dc.w    0
  19100.     dc.w    $0180    ; Color 0
  19101. CopCol0    dc.w    0
  19102.     dc.w    $0182    ; Color 1
  19103.     dc.w    $0AAA
  19104.     dc.w    $0184    ; Color 2
  19105.     dc.w    $0777
  19106.     dc.w    $0186    ; Color 3
  19107.     dc.w    $0444
  19108.     dc.w    $0188    ; Color 4
  19109.     dc.w    $0CCC
  19110.     dc.w    $018A    ; Color 5
  19111.     dc.w    $0A00
  19112.     dc.w    $018C    ; Color 6
  19113.     dc.w    $0000
  19114.     dc.w    $018E    ; Color 7
  19115.     dc.w    $004D
  19116.     dc.w    $01AE    ; Color 23
  19117.     dc.w    $0A00
  19118.     dc.w    $01AA    ; Color 21
  19119.     dc.w    $0700
  19120.     dc.w    $01AC    ; Color 22
  19121.     dc.w    $0400
  19122.     dc.w    $008E    ; Display Window Start
  19123.     dc.w    $2C81    ; 2C / 81
  19124.     dc.w    $0090    ; Display Window Stop
  19125.     dc.w    $2CC1    ; 2C / C1
  19126.     dc.w    $0092    ; Display Data Fetch Start
  19127.     dc.w    $0038
  19128.     dc.w    $0094    ; Display Data Fetch Stop
  19129.     dc.w    $00D0
  19130.     dc.w    $0108
  19131.     dc.w    0
  19132.     dc.w    $010A
  19133.     dc.w    0
  19134.     dc.w    $0102    ; bplcon1
  19135.     dc.w    0
  19136.     dc.w    $0104    ; bplcon2
  19137.     dc.w    $0024
  19138.     dc.w    $2C07    ; Wait for line $2C, pos $07
  19139.     dc.w    $FFFE
  19140.     dc.w    $0100    ; bplcon0
  19141.     dc.w    $3200
  19142. CopListAnalyzer
  19143.     dcb.w    320,0
  19144. CopListInsPos
  19145.     dc.w    $B807    ; Wait for line $88, pos $07
  19146.     dc.w    $FFFE
  19147.     dc.w    $0100    ; bplcon0
  19148.     dc.w    $2200
  19149. CopListBpl4
  19150.     dc.w    $00E8    ; Bitplane 4 high
  19151.     dc.w    0
  19152.     dc.w    $00EA    ; Bitplane 4 low
  19153.     dc.w    0
  19154.     dc.w    $0188    ; Color 4
  19155. NoteCol    dc.w    $004D
  19156.     dc.w    $B907    ; Wait for line $89, pos $07
  19157.     dc.w    $FFFE
  19158.     dc.w    $0100    ; bplcon0
  19159.     dc.w    $3200
  19160. CopListMark2    
  19161.     dcb.w    672,0
  19162.  
  19163.     dc.w    $E907    ; Wait for line $E9, pos $07
  19164.     dc.w    $FFFE
  19165.     dc.w    $010A    ; bpl2mod
  19166.     dc.w    $FFD8
  19167.     dc.w    $0108    ; bpl1mod
  19168.     dc.w    $FFD8
  19169.     dc.w    $EA07    ; Wait for line $EA, pos $07
  19170.     dc.w    $FFFE
  19171.     dc.w    $0104    ; bplcon2
  19172.     dc.w    $0010
  19173.     dc.w    $010A    ; bpl2mod
  19174.     dc.w    0
  19175.     dc.w    $0108    ; bpl1mod
  19176.     dc.w    0
  19177.     dc.w    $EB07    ; Wait for line $E8, pos $07
  19178.     dc.w    $FFFE
  19179.     dc.w    $010A    ; bpl2mod
  19180.     dc.w    $FFD8
  19181.     dc.w    $0108    ; bpl1mod
  19182.     dc.w    $FFD8
  19183.     dc.w    $EC07    ; Wait for line $EC, pos $07
  19184.     dc.w    $FFFE
  19185.     dc.w    $010A    ; bpl2mod
  19186.     dc.w    0
  19187.     dc.w    $0108    ; bpl1mod
  19188.     dc.w    0
  19189.     dc.w    $ED07    ; Wait for line $ED, pos $07
  19190.     dc.w    $FFFE
  19191.     dc.w    $010A    ; bpl2mod
  19192.     dc.w    $FFD8
  19193.     dc.w    $0108    ; bpl1mod
  19194.     dc.w    $FFD8
  19195.     dc.w    $EE07    ; Wait for line $EE, pos $07
  19196.     dc.w    $FFFE
  19197.     dc.w    $010A    ; bpl2mod
  19198.     dc.w    0
  19199.     dc.w    $0108    ; bpl1mod
  19200.     dc.w    0
  19201.     dc.w    $EF07    ; Wait for line $EF, pos $07
  19202.     dc.w    $FFFE
  19203.     dc.w    $010A    ; bpl2mod
  19204.     dc.w    $FFD8
  19205.     dc.w    $0108    ; bpl1mod
  19206.     dc.w    $FFD8
  19207.     dc.w    $F007    ; Wait for line $F0, pos $07
  19208.     dc.w    $FFFE
  19209.     dc.w    $010A    ; bpl2mod
  19210.     dc.w    0
  19211.     dc.w    $0108    ; bpl1mod
  19212.     dc.w    0
  19213.     dc.w    $F107    ; Wait for line $F1, pos $07
  19214.     dc.w    $FFFE
  19215.     dc.w    $010A    ; bpl2mod
  19216.     dc.w    $FFD8
  19217.     dc.w    $0108    ; bpl1mod
  19218.     dc.w    $FFD8
  19219.     dc.w    $F207    ; Wait for line $F2, pos $07
  19220.     dc.w    $FFFE
  19221.     dc.w    $010A    ; bpl2mod
  19222.     dc.w    0
  19223.     dc.w    $0108    ; bpl1mod
  19224.     dc.w    0
  19225.     dc.w    $F307    ; Wait for line $F3, pos $07
  19226.     dc.w    $FFFE
  19227.     dc.w    $010A    ; bpl2mod
  19228.     dc.w    $FFD8
  19229.     dc.w    $0108    ; bpl1mod
  19230.     dc.w    $FFD8
  19231.     dc.w    $F407    ; Wait for line $F4, pos $07
  19232.     dc.w    $FFFE
  19233.     dc.w    $010A    ; bpl2mod
  19234.     dc.w    0
  19235.     dc.w    $0108    ; bpl1mod
  19236.     dc.w    0
  19237.     dc.w    $F507    ; Wait for line $F5, pos $07
  19238.     dc.w    $FFFE
  19239.     dc.w    $010A    ; bpl2mod
  19240.     dc.w    $FFD8
  19241.     dc.w    $0108    ; bpl1mod
  19242.     dc.w    $FFD8
  19243.     dc.w    $F607    ; Wait for line $F6, pos $07
  19244.     dc.w    $FFFE
  19245.     dc.w    $010A    ; bpl2mod
  19246.     dc.w    0
  19247.     dc.w    $0108    ; bpl1mod
  19248.     dc.w    0
  19249.     dc.w    $01B2    ; Color 1
  19250.     dc.w    0
  19251.     dc.w    $01B4    ; Color 2
  19252.     dc.w    0
  19253.     dc.w    $01B6    ; Color 3
  19254.     dc.w    0
  19255.     dc.w    $01BA    ; Color 5
  19256.     dc.w    0
  19257.     dc.w    $01BC    ; Color 6
  19258.     dc.w    0
  19259.     dc.w    $01BE    ; Color 7
  19260.     dc.w    0
  19261.     dc.w    $FFDF    ; Wait for line $FF, pos $DF
  19262.     dc.w    $FFFE
  19263.     dc.w    $2907    ; Wait for line $29, pos $07
  19264.     dc.w    $FFFE
  19265.     dc.w    $0100    ; bplcon0
  19266.     dc.w    $2200
  19267.     dc.w    $2C07    ; Wait for line $2C, pos $07
  19268.     dc.w    $FFFE
  19269.     dc.w    $0100    ; bplcon0
  19270.     dc.w    $0200
  19271.     dc.w    $FFFF    ; Wait for line $FF, pos $FF
  19272.     dc.w    $FFFE    ; End of copperlist
  19273.  
  19274.  
  19275. CopList2
  19276.     dc.w    $B607    ; Wait for line $B6, pos $07
  19277.     dc.w    $FFFE
  19278.     dc.w    $0100    ; bplcon0
  19279.     dc.w    $2200
  19280. CopList2Bpl4Ptr
  19281.     dc.w    $00E8    ; Bitplane 4 high
  19282.     dc.w    0
  19283.     dc.w    $00EA    ; Bitplane 4 low
  19284.     dc.w    0
  19285.     dc.w    $0188    ; Color 4
  19286.     dc.w    $004D
  19287.     dc.w    $01B2    ; LoopSprite color
  19288.     dc.w    $00F0
  19289.     dc.w    $01BA    ; PlayPos Sprite color
  19290.     dc.w    $00FF
  19291.     dc.w    $B707    ; Wait for line $B7, pos $07
  19292.     dc.w    $FFFE
  19293.     dc.w    $0100    ; bplcon0
  19294.     dc.w    $3200
  19295.     dc.w    $FFDF    ; Wait for line $FF, pos $DF
  19296.     dc.w    $FFFE
  19297.     dc.w    $2907    ; Wait for line $29, pos $07
  19298.     dc.w    $FFFE
  19299.     dc.w    $0100    ; bplcon0
  19300.     dc.w    $2200
  19301.     dc.w    $2C07    ; Wait for line $2C, pos $07
  19302.     dc.w    $FFFE
  19303.     dc.w    $0100    ; bplcon0
  19304.     dc.w    $0200
  19305.     dc.w    $FFFF    ; Wait for line $FF, pos $FF
  19306.     dc.w    $FFFE    ; End of copperlist
  19307.  
  19308.  
  19309. PointerSpriteData
  19310.     dc.w    0,0
  19311.     dc.w    $FFFF,$FFFF,$8002,$FFFE,$BFF4,$C00C,$BFE8,$C018
  19312.     dc.w    $BFD0,$C030,$BFE8,$C018,$BFF4,$C00C,$BFFA,$C006
  19313.     dc.w    $BFFD,$C003,$BFFA,$C006,$B7F4,$C80C,$ABE8,$DC18
  19314.     dc.w    $95D0,$F630,$A2A0,$E360,$C140,$C1C0,$8080,$8080
  19315. NoSpriteData
  19316.     dc.w    0,0,0,0
  19317. CursorSpriteData
  19318.     dc.w    0,0
  19319.     dc.w    $FFE0,$FFE0,$FFE0,$FFE0,$8020,$0000,$8020,$0000
  19320.     dc.w    $8020,$0000,$8020,$0000,$8020,$0000,$8020,$0000
  19321.     dc.w    $8020,$0000,$8020,$0000,$8020,$0000,$8020,$0000
  19322.     dc.w    $0000,$FFE0,$0000,$FFE0
  19323.     dc.w    0,0
  19324. LineCurSpriteData
  19325.     dc.w    0,0,$0000,$FE00,$0000,$FE00,$0000,$0000,0,0
  19326. VUSpriteData1
  19327.     dc.w    $E95B,$EA01
  19328.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19329.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19330.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19331.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19332.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19333.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19334.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19335.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19336.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19337.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19338.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19339.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19340.     dc.w    0,0
  19341. VUSpriteData2
  19342.     dc.w    $E97F,$EA01
  19343.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19344.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19345.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19346.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19347.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19348.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19349.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19350.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19351.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19352.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19353.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19354.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19355.     dc.w    0,0
  19356. VUSpriteData3
  19357.     dc.w    $E9A3,$EA01
  19358.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19359.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19360.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19361.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19362.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19363.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19364.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19365.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19366.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19367.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19368.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19369.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19370.     dc.w    0,0
  19371. VUSpriteData4
  19372.     dc.w    $E9C7,$EA01
  19373.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19374.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19375.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19376.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19377.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19378.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19379.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19380.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19381.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19382.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19383.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19384.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19385.     dc.w    0,0
  19386. LoopSpriteData1
  19387.     dc.w 0,0
  19388.     dc.w $F000,0,$F000,0,$F000,0,$F000,0,$1000,0,$1000,0,$1000,0,$1000,0
  19389.     dc.w $1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0
  19390.     dc.w $1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0
  19391.     dc.w $1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$7000,0
  19392.     dc.w $1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0
  19393.     dc.w $1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0
  19394.     dc.w $1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0
  19395.     dc.w $1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0
  19396.     dc.w 0,0
  19397. LoopSpriteData2
  19398.     dc.w 0,0
  19399.     dc.w $F000,0,$F000,0,$F000,0,$F000,0,$8000,0,$8000,0,$8000,0,$8000,0
  19400.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  19401.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  19402.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$E000,0
  19403.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  19404.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  19405.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  19406.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  19407.     dc.w 0,0
  19408. PlayPosSpriteData
  19409.     dc.w 0,0
  19410.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  19411.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  19412.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  19413.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  19414.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  19415.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  19416.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  19417.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  19418.     dc.w 0,0
  19419.  
  19420. ;******** BSS HUNK ********
  19421.  
  19422.     SECTION ptbss,BSS
  19423.  
  19424. FileInfoBlock    ds.b    256 ;,0
  19425. FIB_EntryType    EQU    FileInfoBlock+4
  19426. FIB_FileName    EQU    FileInfoBlock+8
  19427. FIB_FileSize    EQU    FileInfoBlock+124
  19428. FIB_DateStamp    EQU    FileInfoBlock+132
  19429.  
  19430. InfoData    ds.b    36
  19431. TopMenusBuffer    ds.b    2200
  19432. TextDataBuffer    ds.b    546  
  19433. TrackBuffer    ds.b    256
  19434. CmdsBuffer    ds.b    256
  19435. BlockBuffer    ds.b    256
  19436. PatternBuffer    ds.b    1024
  19437. UndoBuffer    ds.b    1024
  19438.  
  19439. TrackdiskIOExtTD
  19440.         ds.w    1
  19441.         ds.l    3
  19442. TDPortPtr    ds.l    1
  19443.         ds.w    1
  19444. Fmt_tja        ds.w    1
  19445.         ds.l    2
  19446.         ds.b    3
  19447. Fmt_hmmm    ds.b    1
  19448.         ds.w    1
  19449. FmtDataSize    ds.w    2
  19450. FmtDataPtr    ds.w    2
  19451. FmtDiskOffset    ds.l    9
  19452.  
  19453. SplitTransTable    ds.b    38
  19454. SplitInstrTable    ds.b    38
  19455.  
  19456. ModulesPath2    ds.b    64
  19457. SongsPath2    ds.b    64
  19458. SamplePath2    ds.b    64
  19459.  
  19460.         ds.l    1
  19461.  
  19462. SetupData    ds.b    26
  19463. SongsPath    ds.b    32
  19464. ModulesPath    ds.b    32
  19465. SamplePath    ds.b    32
  19466. PrintPath    ds.b    32
  19467. ColorTable    ds.w    8
  19468. PackMode    ds.b    1
  19469. ModPackMode    ds.b    1
  19470. SplitFlag    ds.b    1
  19471. FilterFlag    ds.b    1
  19472. TransDelFlag    ds.b    1
  19473. ShowDecFlag    ds.b    1
  19474. AutoDirFlag    ds.b    1
  19475. AutoExitFlag    ds.b    1
  19476. ModOnlyFlag    ds.b    1
  19477. MIDIFlag    ds.b    1
  19478. SplitData    ds.b    4
  19479.         ds.b    4
  19480.         ds.b    4
  19481.         ds.b    4
  19482. KeyRepDelay    ds.w    1
  19483. KeyRepSpeed    ds.w    1
  19484. Accidental    ds.b    1
  19485.         ds.b    1
  19486. ExtCommands    ds.b    32*8 ; 256 bytes
  19487. MaxDirEntries    ds.w    1
  19488. MaxPLSTEntries    ds.w    1
  19489. MultiModeNext    ds.b    4
  19490. EffectMacros    ds.w    10
  19491. RAWIFFMode    ds.b    1
  19492. IntMode        ds.b    1
  19493. OverrideFlag    ds.b    1
  19494. NosamplesFlag    ds.b    1
  19495. BlankZeroFlag    ds.b    1
  19496. ShowDirsFlag    ds.b    1
  19497. ShowPublicFlag    ds.b    1
  19498. CutToBufFlag    ds.b    1
  19499. IFFLoopFlag    ds.b    1
  19500. HHFlag        ds.b    1
  19501. Tempo        ds.w    1
  19502. DMAWait        ds.w    1
  19503. TuneNote    ds.w    1
  19504. TToneVol    ds.w    1
  19505. SalvageAddress    ds.b    8
  19506. PTPath        ds.b    32  ; 512 bytes
  19507. DefaultSpeed    ds.w    1
  19508. VUmeterColors    ds.w    48
  19509. AnalyzerColors    ds.w    40
  19510.         ds.b    302 ; Pad to 1024 bytes
  19511.  
  19512. HelpTextIndex    ds.l    256
  19513. HelpTextData    ds.b    656
  19514.  
  19515. InpEvPort    ds.b    34
  19516. InpEvIOReq    ds.b    48
  19517.  
  19518. ScopeInfo    ds.b    20*4
  19519. ScopeSamInfo    ds.b    16*31
  19520. BlankSample    ds.b    320
  19521. FileName    ds.b    96
  19522. NewFileName    ds.b    96
  19523. SampleFileName    ds.b    28
  19524. PresetNameText    ds.b    22
  19525. DirInputName    ds.b    30
  19526. NewInputName    ds.b    30
  19527. TempSampArea    ds.w    380
  19528. SaveColors    ds.w    40+48
  19529.  
  19530. END
  19531.  
  19532. ; /* End of File */
  19533.